Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确保TypeScript中的执行顺序_Javascript_Typescript_Promise_Es6 Promise - Fatal编程技术网

Javascript 如何确保TypeScript中的执行顺序

Javascript 如何确保TypeScript中的执行顺序,javascript,typescript,promise,es6-promise,Javascript,Typescript,Promise,Es6 Promise,当我在typescript中遇到执行顺序问题时,我尝试实现一些功能: 代码: 新承诺((解决)=>{ 设置超时(()=>{ 控制台日志(“function11111”); 解决(); } ,3000); }) .然后(=>{ 设置超时(()=>{ console.log(“function22222”); } ,2000); }) .然后(=>{ 设置超时(()=>{ console.log(“function3333”); } ,1000); })问题在于,一旦调用了

当我在typescript中遇到执行顺序问题时,我尝试实现一些功能:

代码:
新承诺((解决)=>{
设置超时(()=>{
控制台日志(“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