2017-04-15 93 views
0

扩大阵列我很新的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; 
    }); 

这就是我想要做的事:

  1. 负荷从localStorage的阵列
  2. 执行异步查找为数组的每个元素
  3. 等待所有元件查找完成
  4. 结合回到(现在已经完全初始化)阵列
  5. 数组(这可以随时随地的第一步之后进行)排序

回答

1

你需要的东西是这样的:

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完成,然后发出一个项目 - 所有项目的数组。