RxJs从承诺
问题描述:
扩大阵列我很新的RxJs,需要一些帮助了解如何使这项工作:RxJs从承诺
let myObs= Observable.fromPromise(this.storage.get('storageKeyForArray'))
.map(a=>Observable.from(a)) //does this blow up if array is null?
.map(e=>doSomethingWithElement(e)) //flatMap?
...
;
myObs.first().subscribe((initializedArray) => {
this.stuff= initializedArray;
this.initialized = true;
});
这就是我想要做的事:
- 负荷从localStorage的阵列
- 执行异步查找为数组的每个元素
- 等待所有元件查找完成
- 结合回到(现在已经完全初始化)阵列
- 数组(这可以随时随地的第一步之后进行)排序
答
你需要的东西是这样的:
Observable.fromPromise(asyncLoadArrayOperation())
.flatMap(x => Observable.from(x))
.flatMap(x => someAsyncFunction(x))
.toArray()
.subscribe(x => ...)
flatMap(X =>可观测.from(x)) - 假设x是一个数组,Observable.from返回一个逐一发出数组项的Observable。 flatMap操作符将使这个Observable变平,也就是说,下一个操作符将获得项目,而不是项目的Observable(如果使用'map')。
flatMap(x => someAsyncFunction(x)) - 在这种情况下,flatMap用于获取someAsyncFunction承诺执行结果。同样,如果你使用'地图',它会发出一个承诺。
toArray() - 此操作符收集所有项目,直到源Observable完成,然后发出一个项目 - 所有项目的数组。