我有多个承诺获取不同的资产。我想实现:
- 通过
then()
先执行一些代码来处理这些承诺。 - 当一切都解决/获取,执行一些代码启动我的应用程序通过
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 => {});
但是我可以信赖它吗?是"单一"总是then()
在Promise.all()
上执行then()
之前执行?
While Promise。all被卡住了,因为它等待所有的promise完成,所以不能保证它在.then
调用最后解析的promise之后会解析。
相反,你应该尝试从.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调用
之后会被解析。你可以使用Async/await。通过等待每个承诺,您可以在最后编写代码来处理数据。
的例子:
(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);
})();