0

我正在构建一个 Angular 应用程序。在我的组件的构造函数中,我从服务器发起了对几个元素的请求,这些元素自然是异步发生的。这些请求作为rxjs/Behavior我订阅的对象返回给我。

我需要做的是在最后一个返回后立即继续处理。但我需要确保它们按照提交的顺序进行处理,而不一定按照返回的顺序进行。

我可以创建一个 janky hack 来检测最后一个返回的时间:

let counter = 0;
let output = new Array( input.length );
for ( let i = 0 ; i < input.length ; i++ ) {
  counter++;
  fetch( input[i] ).subscribe( 
    result => {
      output[i] = result;
      counter--;
      if ( counter === 0 ) {
        // what to do at the end
      }
    }
  );
}

这有效。但它很难看,不容易理解,也不是我所说的生产就绪代码。

一旦完成了一系列主题,Angular 做某事的方式是什么?

4

1 回答 1

3

您正在寻找forkJoin

Observable.forkJoin(...input.map(fetch)) 
 .subscribe(responses => {
    // responses contains the emitted values after completion
    // in the same order as input
  });

有关更多详细信息和一些需要注意的事项,请参阅文档。

作为未来的扩展提示,rxjs 网站有一个很好的调查问卷,可以帮助您在各种情况下找到您正在寻找的运营商。

于 2017-12-28T15:00:10.033 回答