RxJS - 收集异步操作结果

时间:2016-09-06 16:29:12

标签: javascript typescript reactive-programming rxjs observable

我想对数组的每个元素执行异步操作,并在字典中收集结果。我目前的做法是:



let asyncOp = () => Rx.Observable.interval(300).take(1);
let dict = {};

Rx.Observable.from(['a', 'b'])
  .mergeMap(el => asyncOp()
              .map(asyncOpRes => dict[el] = asyncOpRes)
              .do(state => console.log('dict state: ', dict))
  )
  .takeLast(2)
  .take(1)
  .map(() => dict)
  .subscribe(res => console.log('dict result: ', res));

<script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.7/dist/global/Rx.umd.js"></script>
&#13;
&#13;
&#13;

基本上这就像我想要的那样,但它似乎是对RxJs运算符的一种尴尬用法。所以我需要以下方面的帮助:

  1. 避免使用dict变异(尝试使用scan(),但不知道如何在这里使用它。有一个mergeScan()方法,但这里也一样)
  2. takeLast和take的用法 - 应该可以简化吗?
  3. 我想我错过了一个RxJS操作符,它帮助我简化了这个操作。

1 个答案:

答案 0 :(得分:3)

To&#34;对数组的每个元素执行异步操作,并将其结果收集到字典中#34;使用outdatedmergeMap函数可以显着简化代码:

com_dotnet