当我最终遇到打字稿中的执行顺序问题时,我正在尝试实现一些功能:
a
输出:
new Promise((resolve) => {
setTimeout(()=>{
console.log("function11111");
resolve();
}
,3000);
})
.then(_=>{
setTimeout(()=>{
console.log("function22222");
}
,2000);
})
.then(_=>{
setTimeout(()=>{
console.log("function3333333");
}
,1000);
})
我的问题是:
1)对于function1111,如果我们将这个console.log('fucntion1111')替换为需要花费几秒钟的函数,在这种情况下,我的代码将在函数完成执行之前触发resolve(),那么如何确保等待我的功能
2)然后,在我的代码中,为什么执行不遵守我的命令?我以为是为此目的创造了诺言。
答案 0 :(得分:4)
问题在于,一旦调用了初始then
,就会同时调用所有resolve()
处理程序。而且由于每个都有不同的超时,因此输出顺序为function33333 and then functon2222
。
要维持订单,您可以执行诺言链,该链将在调用下一个promise
块之前等待上一个then()
得到解决。
我已经兑现了诺言。如果需要进一步说明,请告诉我。
new Promise((resolve) => {
setTimeout(()=>{
console.log("function11111");
resolve();
}
,3000);
})
.then(_=> new Promise(resolve => {
setTimeout(()=>{
console.log("function22222");
resolve();
}
,2000);
})
)
.then(_=> new Promise(resolve => {
setTimeout(()=>{
console.log("function3333333");
resolve();
}
,1000);
})
);