【问题标题】:Angular combine 2 promises to 1 promiseAngular 将 2 个承诺与 1 个承诺相结合
【发布时间】:2020-07-10 06:55:20
【问题描述】:

在我的应用程序中,我正在尝试实现 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;
    });
  }

如何将getAllItem1ToConnectgetAllItem2ToConnect 组合成1 个promise?

【问题讨论】:

  • 我建议你跳过 toPromise() 并学习如何使用 observables
  • @ShamPooSham 谢谢,但我需要它是一个明确的承诺......别担心,我在其他任何地方都使用 observables :)
  • 很好 :) 我到处都能看到,人们使用 toPromise 是因为他们害怕可观察的东西。但是,是的,有时你只需要使用承诺
  • 如果您刚开始项目,我强烈建议您坚持使用 rxjs。无论如何,您都必须拥有它,这样您就可以利用它的好处,而不必来回承诺。
  • @bryjohns 谢谢,这实际上是为了项目结束时的一个特殊功能......

标签: angular typescript promise


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢!这正是我所需要的......完美地工作
猜你喜欢
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
  • 2018-01-17
  • 2016-08-05
  • 1970-01-01
相关资源
最近更新 更多