【问题标题】:How do I resolve multiple promises as they resolve?我如何解决多个承诺,因为它们解决了?
【发布时间】:2020-11-02 15:51:38
【问题描述】:

比如说,我有三个承诺。一个需要 1000 毫秒才能解决,另一个需要 2000 毫秒才能解决,第三个需要 3000 毫秒才能解决。

如何同时启动所有 Promise,并在每个已解决的 Promise 发生时处理它们。

例如。

let fastPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve(""), 1000);
});

let mediumPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve(""), 2000);
});

let slowPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve(""), 4000);
});

在这种情况下,我希望同时启动所有三个 Promise,并在它们解决时按顺序处理它们。 即处理 fastPromise,然后是 mediumPromise,然后是 slowPromise。

【问题讨论】:

  • 你已经同时解雇了他们。只需添加fastPromise.then(...) 等来处理它们的完成......!?
  • 从字面上看,这就是 Promise 的目的和默认行为。
  • 请参考Promise.all,它会帮助你达到你的目的。
  • @Pritesh 不会的。

标签: javascript promise


【解决方案1】:

如果出于某种原因,您正在寻找一种方法来为所有 Promise 提供某种通用处理程序,您可以这样做:

const fastPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("fast"), 1000);
});

const mediumPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("medium"), 2000);
});

const slowPromise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("slow"), 4000);
});

function commonHandler(result) {
  console.log(result);
}

[fastPromise, mediumPromise, slowPromise].forEach((p) => p.then(commonHandler));

(别忘了用同样的方法添加.catch())。

但是,如果您只想触发 X Promise 并在它们解析时使用 X 处理程序来处理它们,那么......这是默认的 Promise 行为,除了将.then() 添加到每个 Promise 之外别无他法。

【讨论】:

    猜你喜欢
    • 2022-10-31
    • 2018-03-07
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2020-09-07
    • 2016-12-23
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多