【问题标题】:Can I keep track of a value when using pipeable operators?使用可管道运算符时,我可以跟踪值吗?
【发布时间】:2019-07-09 10:16:00
【问题描述】:

有没有办法使用可管道操作符来跟踪值?

举一个具体的例子,假设我想:
通过数据流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))

Related stackblitz

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


注意:如果可能的话,我不希望通过在顶部创建一个对象来将我需要的值一直向下传递。

【问题讨论】:

    标签: rxjs rxjs-pipeable-operators


    【解决方案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));
    

    【讨论】:

    • 我很惊讶这可以这样工作,但它确实有效。谢谢!
    猜你喜欢
    • 2016-11-28
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 2014-01-22
    • 2010-09-17
    相关资源
    最近更新 更多