我正在编写一个Javascript应用程序以从传感器获取数据。我开始在客户端和服务器端同时使用Bluebird和Bluebird.cororutine来使用ES6 Promises + Generators,但效果不佳。
有人告诉我Promises在(多事件)用例中无法正常工作,并且可以选择使用RxJS。
我看过RxJS,看起来可以做与Promises一样的东西,但效果更好。
我想使用生成器(异步/等待)来编写异步代码以使其看起来像同步,而我的问题是:
我可以使用RxJS +(async / await)还是RxJS已经拥有与(async / await)相同的方法?
谢谢
最佳答案
异步/等待不是ES6的一部分,它计划在ES7中使用。因此,您可能不会很快在JavaScript中使用它。 TypeScript supports async/await for ES5 since 2.1。
它认为您可以将RxJS与async / await一起使用。异步/等待与Proxes一起使用,就像RxJS一样,即使它主要与Observables一起使用。有诸如Observable.toPromise()
之类的方法可将Observable转换为Promises,大多数Observable也接受Promise作为参数。
因此,我认为两者都可以很好地互换(我还没有亲自尝试过)。
如果您的主要目的是使您的代码比RxJS更具可读性,那么减少回调地狱是一个不错的选择。
这两个示例说明如何使用Observable.concatMap()
operator依次调用多个HTTP请求。这两个示例都是用TypeScript编写的,但在
ES6也是如此。这些示例还使用了新的RxJS实现(https://github.com/ReactiveX/RxJS):
Angular 2 + rxjs - how return stream of objects fetched with several subsequent http requests
How to use exhaustMap in ReactiveX/rxjs 5 in TypeScript