结合 Angular 2 中的承诺

问题描述 投票:0回答:2

有没有办法在 AngularJS 2 中组合 Promise? 例如,在 Angular 1 中,我会使用

$q.all
将多个请求组合成一个承诺。 Angular 2 有等效的吗?

angular promise
2个回答
14
投票

http 模块根据 Observables 工作,这与 Promise 不同,但您可以进行链接调用和并行调用。

可以使用

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]});

您可以在这里找到更多详细信息和演示:Angular 和 Http

您还可以在 Observable 上调用

toPromise()
并将其转换为常规 Promise。


3
投票

我建议对 Angular 2+ 使用 Observables,但如果你仍然需要使用 Promises,你可以使用以下内容:

Promise.all(
      [
         promise1,
         promise2, 
         promise3
      ]
);
© www.soinside.com 2019 - 2024. All rights reserved.