Javascript 如何确保JS函数在使用自己的setTimeOut执行下一个回调函数之前完成运行?

Javascript 如何确保JS函数在使用自己的setTimeOut执行下一个回调函数之前完成运行?,javascript,promise,synchronous,Javascript,Promise,Synchronous,我有多个回调函数,它们有自己的setTimeOut值。当我试着一个接一个地连续运行时,setTimeOut值最短的一个会首先被渲染,即使它被称为最新的 也有类似的问题(如、和),但当每个函数都有自己的内部setTimeout值时,它们的答案不起作用 (使用纯JS)强制函数等待(或确保前一个函数完成运行)直到前一个函数完成,而不使用额外的setTimeOut,最好的方法是什么 代码: 结果: three //coming first because the function three has t

我有多个回调函数,它们有自己的setTimeOut值。当我试着一个接一个地连续运行时,setTimeOut值最短的一个会首先被渲染,即使它被称为最新的

也有类似的问题(如、和),但当每个函数都有自己的内部setTimeout值时,它们的答案不起作用

(使用纯JS)强制函数等待(或确保前一个函数完成运行)直到前一个函数完成,而不使用额外的setTimeOut,最好的方法是什么

代码:

结果:

three //coming first because the function three has the shortest setTimeout value
two 
one //coming at last despite being called first
结果应该是:

one
two 
three

链接到

为过程的每个部分定义函数,使用复制的数组数组作为函数调用的参数,移动数组,直到数组中没有任何元素

函数numsequence(消息、时间){
返回新承诺(函数(解析){
setTimeout(函数(){
解析(消息)
},时间)
})
}
函数计数(值){
console.log(值);
}
函数下一步(数组){
if(array.length){
返回进程(数组)
}否则{
返回“完成”
}
}
设arr=[
[“一”,1000],
[“两个”,500],
[“三”,200]
];
让copy=arr.slice(0);
函数进程(数组){
返回NumSequences.apply(null,array.shift())
.然后(计数)
.then(next.bind(null,数组))
}
过程(副本)
.然后(功能(完成){
控制台日志(完整)
})
one
two 
three