angular – 在RxJS Observable中“展平”数组的最佳方法

前端之家收集整理的这篇文章主要介绍了angular – 在RxJS Observable中“展平”数组的最佳方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的后端经常将数据作为数组返回到RxJS 5 Observable中(我正在使用Angular 2).

我经常发现自己想要使用RxJS运算符单独处理数组项,我使用以下代码(JSBin):

const dataFromBackend = Rx.Observable.of([
  { name: 'item1',active: true },{ name: 'item2',active: false },{ name: 'item3',active: true }
]);

dataFromBackend
  // At this point,the obs emits a SINGLE array of items
  .do(items => console.log(items))
  // I flatten the array so that the obs emits each item INDIVIDUALLY
  .mergeMap(val => val)
  // At this point,the obs emits each item individually
  .do(item => console.log(item))
  // I can keep transforming each item using RxJS operators.
  // Most likely,I will project the item into another obs with mergeMap()
  .map(item => item.name)
  // When I'm done transforming the items,I gather them in a single array again
  .toArray()
  .subscribe();

mergeMap(val => val)行感觉不是很惯用.

有没有更好的方法将变换应用于由Observable发出的数组成员?

NB.我希望RxJS运算符(vs数组方法)转换我的项目,因为我需要能够将每个项目投影到第二个observable.典型用例:项目ID列表的后端返回,我需要从后端请求所有这些项目.

您可以使用不带任何参数的concatAll()或mergeAll().
dataFromBackend
  .do(items => console.log(items))
  .mergeAll() // or .concatAll()

这(包括mergeMap)仅适用于RxJS 5,因为它以相同的方式处理Observable,数组,类数组对象,Promises等.

最后你也可以这样做:

.mergeMap(val => Observable.from(val)
  .do(item => console.log(item))
  .map(item => item.name)
)
.toArray()

猜你在找的Angularjs相关文章