我如何在Rx Observable上“等待”?

我希望能够等待一个可观察的,例如

const source = Rx.Observable.create(/* ... */)
//...
await source;

天真的尝试导致等待立即解决并且不阻止执行

编辑:我的完整意向用例的伪代码是:

if (condition) {
  await observable;
}
// a bunch of other code

我知道我可以将其他代码移动到另一个单独的函数中,并将它传递给订阅回调函数,但我希望能够避免这种情况。


你必须通过承诺await 。 将observable的下一个事件转换为promise并等待。

if (condition) {
  await observable.first().toPromise();
}

编辑注意:此答案最初用于.take(1),但更改为使用.first(),它避免了Promise的问题,如果流在值出现之前结束,则不会解析该问题。


它一定要是

await observable.first().toPromise();

正如之前的评论中指出的那样,当take(1)first()操作符存在空的完成观察值时,会有很大差异。

Observable.empty().first().toPromise()会导致EmptyError被拒绝,这可以被相应地处理,这通常是一个理想的行为。

Observable.empty().take(1).toPromise()会导致未决的承诺,这是可取的...几乎从不。


你将需要await一个承诺,所以你会想使用toPromise() 。 有关toPromise()更多详细信息,请参阅toPromise()

链接地址: http://www.djcxy.com/p/55463.html

上一篇: How can I `await` on an Rx Observable?

下一篇: How to access the value of a promise?