这是此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应该用于其他类型的源,但我不知道。
谢谢。
答案 0 :(得分:1)
正如Kos所述,在Rxjs v6中,可管道运算符已成为规范,不再使用.
将所有内容链接在一起。
我假设由于您使用的是fromEventPattern
,而不是Observable.fromEventPattern
,所以您使用的是rxjs v6 +,在这种情况下,您需要将concatMap()
包装在pipe()
内。>
this.rxSubscription = this.emitter.pipe(concatMap(value:any => this.handleUpdatedValuesComingFromSensor(value))).subscribe()