【问题标题】:Combining promises in Angular 2在 Angular 2 中结合 Promise
【发布时间】:2016-03-28 01:55:07
【问题描述】:

有没有办法在 AngularJS 2 中结合 Promise? 例如,在 Angular 1 中,我会使用 $q.all 将多个请求组合成一个 Promise。 是否有 Angular 2 的等价物?

【问题讨论】:

  • $q.all 没有链接承诺,而是将它们组合在一起以在所有承诺都解决时解决,或者在第一个被拒绝时拒绝。这里没有承诺顺序的意义。你有 Promise.all 做同样的工作。
  • 我的错;我已经更新了标题和问题!

标签: angular promise


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    您可以在此处找到更多详细信息和演示:

    http://www.syntaxsuccess.com/viewarticle/angular-2.0-and-http

    您还可以在 Observable 上调用 toPromise() 并将其转换为常规承诺。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-25
      • 2017-08-14
      • 2017-11-16
      • 2016-10-24
      • 2013-04-24
      • 1970-01-01
      • 2017-08-03
      • 2018-04-11
      相关资源
      最近更新 更多