当前位置: 首页 > 知识库问答 >
问题:

RxJS获取可观测的发射前/后值

卫俊力
2023-03-14

我想计算单个可观测物体的排放量之间的差异。

如果一个可观测的物体发出一个新的值,有没有办法同时得到它当前和以前的发射?我想要这样的东西:

ob$.subscribe(val => {
  console.log(val)
  // First emission: [1,2,3]

  // Second emission: [1,2,3,4]

  console.log(arrayDifference(before, after)) // [4]
})

我该怎么做呢?我是否需要将每个发射存储在一个上限变量中,或者是否有一种奇特的RxJS方法来实现这一点?

共有3个答案

苏健柏
2023-03-14

我会使用startWith和pairwise()

 const randomObservable = of('observableString')
  .pipe(startWith('defaultString'), pairwise())
  .subscribe(arrayOfStrings => console.log(arrayOfStrings[0], arrayOfStrings[1]));

上面的代码将控制台日志:“defaultString”,“observableString”。

莫承运
2023-03-14

您可以使用非常模块化的bufferCount运算符来实现这一点:

bufferCount(2, 1)

它将在源的每次1发射后创建一个大小为2的新缓冲区。

或者,也有执行完全相同操作的成对()运算符。

孟彦
2023-03-14

使用扫描操作员检查上一个值

   const arrayDifference = (before, after) => {
    // Immlement the fuction here
    
    const difference = .........
    return difference
    }
    
    
    ob$.pipe(scan((before,after) => arrayDifference(before,after), [])).subscribe(val =>  console.log(val))

这应该行得通

 类似资料:
  • 在组件中: 在init上,我可以观察到 如何获取当前值,如?

  • 我有一个简单的api请求,它向一个对象返回一个可观察的对象,该对象中有一组项,每个项中都有一个链接。因此,我想在当前异步流中直接获取链接后面的数据,但我收到一个CORS错误,错误是: 这是否可能与我当前的函数?还是我误解了一些基本概念?

  • 使用rxjsv6 所以我有多个我想要跟踪/观察的变量,当它们中的任何一个发生变化时,触发一个可观察对象来调用一个API,该API然后根据这些变量更新其他内容。 我想我可能会在上触发一个事件来强制可观察对象做一些事情,但它不会根据我想要的返回结果 例如。 然而,在可观测数据上没有订阅方法。我试图修改我的另一个观察值(这是可行的)

  • 我有一个定期发出JavaScript对象的行为主题。我想构建另一个可观察对象,它将发出底层可观察对象的先前和当前值,以便比较两个对象并确定增量。 pairwise()或bufferCount(2,1)操作符看起来很合适,但它们只有在缓冲区填满后才开始发出,但我要求这个可观察对象从基础可观察对象的第一个事件开始发出。 在第一次发射时,可能只是。 是否有一些内置的运算符,我可以使用以达到预期的结果?

  • 我有两个源观测值,当一个源观测值发出时,我需要计算一些数据。我试图使用操作符,但它只在每个源观测值第一次发出时发出一个值。 是否有任何运算符类似于,一旦任何源可观测对象第一次发出,就立即发出?如果没有,最清晰的方法是什么? 我所尝试的: