承诺:结合单一的解析方法和 Promise.all()

Promises: combine single resolve methods and Promise.all()

我有多个承诺获取不同的资产。我想达到:

  1. 首先执行一些代码以通过 then() 处理其中一些承诺。
  2. 当一切都是 resolved/fetched 时,执行一些通过 Promise.all().then() 启动我的应用程序的代码。

我需要确保 1 在 2 之前执行。根据我的测试,它似乎确实有效。

// handle promises one by one
promise1.then(results => {});
promise2.then(results => {});

// common process that should come after the above then()s
Promise.all([promise1, promise2])
    .then(results => {});

但我可以依靠它吗? "single" then() 总是Promise.all() 上的 then() 之前执行吗?

虽然 Promise.all 因为等待所有承诺完成而停止,但不能保证它会在 .then 调用最后解决的承诺后解决。

相反,您应该尝试从 .then 调用中创建新的承诺。

// handle promises one by one
const promise3 = promise1.then(results => {});
const promise4 = promise2.then(results => {});

// common process that should come after the above then()s
Promise.all([promise3, promise4])
    .then(results => {});

这样你就可以保证 Promise 在 then 调用之后全部 resolve

您可以使用 Async/await。等待每一个promise,最后就可以写代码处理数据了。

示例:

(async () => {
  const responses = [];
  await new Promise((res) => res("promise1")).then((res) => {
    console.log("From promise1 first then");
    responses.push(res);
  });

  // Code at the end to do after all promises
  console.log("Coming from second");
  console.log("Responses:", responses);
})();