Javascript 如何确保TypeScript中的执行顺序
当我在typescript中遇到执行顺序问题时,我尝试实现一些功能: 代码:Javascript 如何确保TypeScript中的执行顺序,javascript,typescript,promise,es6-promise,Javascript,Typescript,Promise,Es6 Promise,当我在typescript中遇到执行顺序问题时,我尝试实现一些功能: 代码: 新承诺((解决)=>{ 设置超时(()=>{ 控制台日志(“function11111”); 解决(); } ,3000); }) .然后(=>{ 设置超时(()=>{ console.log(“function22222”); } ,2000); }) .然后(=>{ 设置超时(()=>{ console.log(“function3333”); } ,1000); })问题在于,一旦调用了
新承诺((解决)=>{
设置超时(()=>{
控制台日志(“function11111”);
解决();
}
,3000);
})
.然后(=>{
设置超时(()=>{
console.log(“function22222”);
}
,2000);
})
.然后(=>{
设置超时(()=>{
console.log(“function3333”);
}
,1000);
})
问题在于,一旦调用了初始的resolve()
,所有then
处理程序都会同时被调用。由于每个函数都有不同的超时时间,因此输出顺序为function33333,然后是functon2222
要维护订单,您可以执行承诺链接,它将在调用下一个then()
块之前等待上一个promise
获得解析
我已把诺言拴在锁链上了。如果你需要更多的澄清,一定要告诉我
新承诺((解决)=>{
设置超时(()=>{
控制台日志(“function11111”);
解决();
}
,3000);
})
.然后(=>新承诺(解决=>{
设置超时(()=>{
console.log(“function22222”);
解决();
}
,2000);
})
)
.然后(=>新承诺(解决=>{
设置超时(()=>{
console.log(“function3333”);
解决();
}
,1000);
})
);
问题在于,一旦调用了初始的resolve()
,所有then
处理程序都会同时被调用。由于每个函数都有不同的超时时间,因此输出顺序为function33333,然后是functon2222
要维护订单,您可以执行承诺链接,它将在调用下一个then()
块之前等待上一个promise
获得解析
我已把诺言拴在锁链上了。如果你需要更多的澄清,一定要告诉我
新承诺((解决)=>{
设置超时(()=>{
控制台日志(“function11111”);
解决();
}
,3000);
})
.然后(=>新承诺(解决=>{
设置超时(()=>{
console.log(“function22222”);
解决();
}
,2000);
})
)
.然后(=>新承诺(解决=>{
设置超时(()=>{
console.log(“function3333”);
解决();
}
,1000);
})
);代码>执行确实尊重承诺管理的代码顺序,但每个回调都会创建一个新的异步进程,该进程不是由承诺管理的。setTimeout
不会返回承诺。它立即返回一个整数,因此立即执行.then()
。(). 在您的“真实世界”代码中,确保在每个中返回一个承诺。然后()
执行确实尊重承诺管理的代码顺序,但每个回调创建一个新的异步进程,该进程不是由承诺管理的。setTimeout
不返回承诺。它立即返回一个整数,因此立即执行.then()
。(). 在您的“真实世界”代码中,请确保在每个中返回一个承诺。然后()
这很好!!!第一个问题呢?我是否应该在我的函数111中实现一个承诺,以确保执行将一直等到完成?第一个承诺本身已经解决了。新承诺实际上是在第一个承诺的resolve()
部分之后触发then。如果这个答案对您有所帮助,并且您没有其他澄清,您可以将其标记为已接受@karim garalit这很好!!!第一个问题呢?我是否应该在我的函数111中实现一个承诺,以确保执行将一直等到完成?第一个承诺本身已经解决了。新承诺实际上是在第一个承诺的resolve()
部分之后触发then。如果这个答案对您有所帮助,并且您没有其他澄清,您可以将其标记为已接受@karim Garali