使用可管道运算符时我可以跟踪值吗?

Can I keep track of a value when using pipeable operators?

有没有办法通过管道操作符跟踪值?

举个具体的例子,假设我想:
在数据流上 S:

  1. 记忆S当前数据
  2. 发出 HTTP 请求
  3. 处理响应
  4. 使用操作结果发出另一个 HTTP 请求
  5. 创建一个包含基于 1. 和响应
  6. 的值的对象

然后合并这些并利用我创建的对象。

基本上,

const data = from([1, 2, 3]).pipe(
  // Memorize here
  map(a => req1(a)),
  flatMap(a => a),
  map(b => syncOp(b)),
  map(c => req2(c)),
  flatMap(d => d),
  map(e => ({id: _memorized_, value: e}))

merge(data).subscribe(f => console.log(f.id, f.value))

Related stackblitz

如有任何意见,我们将不胜感激。


注意:如果可能的话,我宁愿不要通过在顶部创建一个对象来将我需要的值一路向下携带。

您可以轻松地做到这一点,只需重组您的运算符并将 memorized 设为局部变量即可:

const data = from([1, 2, 3]).pipe(
  // Memorize here
  mergeMap(memorized => req1(memorized).pipe(
    flatMap(a => a),
    map(b => syncOp(b)),
    map(c => req2(c)),
    flatMap(d => d),
    map(e => ({id: memorized, value: e}))
  ));

merge(data).subscribe(f => console.log(f.id, f.value));