如何使用异步功能进行RxJS订阅,以序列化onNext调用?

时间:2019-04-24 17:38:30

标签: typescript rxjs

这是此question的后续行动。

因此RxJS会在下一个事件调用我的异步函数,因为上一个事件一旦我在异步方法中等待就完成了。

我需要序列化对该异步函数的调用。

从这个answer上我已经理解了一个类似的问题,我需要将我的异步函数移出订阅并使用concatMap。

现在我的代码无法编译并出现以下错误:

  

错误TS2339:类型“可观察”的属性“ concatMap”不存在。

我的代码(尝试进行调整):

1 /新的订阅代码(不会编译):

this.emitter = fromEventPattern(this.addHandler, this.removeHandler, (err, char) => [err, char]); <= unchanged
this.rxSubscription = this.rxSubscription = this.emitter.concatMap(value:any => this.handleUpdatedValuesComingFromSensor(value)).subscribe(); <= concatMap does not exist on type Observable<any>

2 /提供您信息的异步​​功能

       handleUpdatedValuesComingFromSensor = async (arr: any[]): Promise<void> => {
   ...
   await someMethodAsync();
   ...
}

concatMap应该用于其他类型的源,但我不知道。

谢谢。

1 个答案:

答案 0 :(得分:1)

正如Kos所述,在Rxjs v6中,可管道运算符已成为规范,不再使用.将所有内容链接在一起。 我假设由于您使用的是fromEventPattern,而不是Observable.fromEventPattern,所以您使用的是rxjs v6 +,在这种情况下,您需要将concatMap()包装在pipe()内。

this.rxSubscription = this.emitter.pipe(concatMap(value:any => this.handleUpdatedValuesComingFromSensor(value))).subscribe()