0

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

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

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

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

基本上,

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))

相关堆栈闪电战

任何有关此事的意见将不胜感激。


注意:如果可能的话,我不希望通过在顶部创建一个对象来携带我需要的值。

4

1 回答 1

1

你可以很容易地通过重构你的操作符并创建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));
于 2019-07-09T12:20:03.740 回答