在Angular 2中组合承诺

在Angular 2中组合承诺,angular,promise,Angular,Promise,在AngularJS 2中是否有任何方法可以组合承诺? 例如,在Angular 1中,我将使用$q.all将多个请求组合成一个承诺。 Angular 2是否有一个等价物?http模块在可观察性方面工作,这与promises不同,但您可以进行链接和并行调用 链接可以使用flatMap完成,并行调用可以使用forkJoin处理 示例: //dependent calls (chaining) this.http.get('./customer.json').map((res: Response) =

在AngularJS 2中是否有任何方法可以组合承诺? 例如,在Angular 1中,我将使用
$q.all
将多个请求组合成一个承诺。
Angular 2是否有一个等价物?

http模块在可观察性方面工作,这与promises不同,但您可以进行链接和并行调用

链接可以使用flatMap完成,并行调用可以使用forkJoin处理

示例:

//dependent calls (chaining)
this.http.get('./customer.json').map((res: Response) => {
                   this.customer = res.json();
                   return this.customer;
                })
                .flatMap((customer) => this.http.get(customer.contractUrl)).map((res: Response) => res.json())
                .subscribe(res => this.contract = res);

//parallel
import {Observable} from 'rxjs/Observable';
Observable.forkJoin(
  this.http.get('./friends.json').map((res: Response) => res.json()),
  this.http.get('./customer.json').map((res: Response) => res.json())
).subscribe(res => this.combined = {friends:res[0].friends, customer:res[1]});
您可以在此处找到更多详细信息和演示:


您还可以对可观测对象调用
toPromise()
,并将其转换为常规承诺。

我建议对Angular 2+使用可观测对象,但如果您仍然需要使用承诺,则可以使用以下内容:

Promise.all(
      [
         promise1,
         promise2, 
         promise3
      ]
);

$q.all没有连锁承诺,而是在所有承诺都已解决时将其合并以解决问题,或者在第一个承诺被拒绝时拒绝。这里没有承诺顺序的意义。你答应过。所有人都做同样的工作。我的错误;我已经更新了标题和问题!