承诺:结合单一的解析方法和 Promise.all()
Promises: combine single resolve methods and Promise.all()
我有多个承诺获取不同的资产。我想达到:
- 首先执行一些代码以通过
then()
处理其中一些承诺。
- 当一切都是 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);
})();
我有多个承诺获取不同的资产。我想达到:
- 首先执行一些代码以通过
then()
处理其中一些承诺。 - 当一切都是 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);
})();