首页 > 解决方案 > Angular 将 2 个承诺与 1 个承诺相结合

问题描述

在我的应用程序中,我正在尝试实现一种loadAll方法。

需要做的是调用2个http方法来加载数据。

这两种方法返回承诺。

当我尝试将它们组合成一个承诺时,我得到了一个错误。

  loadAll() {
    return new Promise((resolve, reject) => {
      resolve(
        this.getAllItem1ToConnect(),
          this.getAllItem2ToConnect();
      );
    }
    );
  }

我意识到这是错误的,我该如何实施?

getAllItem1ToConnect 方法:

  getAllItem1ToConnect() {
    return this.http.get<Item1[]>(this.path + '/item').toPromise().then((res: Item1[]) => {
      this.items1 = res;
    });
  }

我如何结合getAllItem1ToConnectgetAllItem2ToConnect1 个承诺?

标签: angulartypescriptpromise

解决方案


您可以使用Promise.all. 这需要一个数组Promises并返回一个Promise.

function func1() {
  return new Promise( (res, rej) => {
    setTimeout(() => res('from func1'), 1000);
  });
}

function func2() {
  return new Promise( (res, rej) => {
    setTimeout(() => res('from func2'), 1000);
  });
}

Promise.all([func1(), func2()]).then( res => console.log(res));

所以,在你的情况下,你想要:

const promise = Promise.all([
  this.getAllItem1ToConnect(),
  this.getAllItem2ToConnect()
]);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all


推荐阅读