Javascript 如何使setTimeout()函数按顺序工作?
假设我有4个函数,每个函数内部都有使用Javascript 如何使setTimeout()函数按顺序工作?,javascript,Javascript,假设我有4个函数,每个函数内部都有使用setTimeout()的循环。如何使这些函数按顺序运行而不重叠?也就是说,如何使它们在前一个完成后立即执行 function1(); function2(); function3(); function4(); 让每个函数在完成后调用下一个函数 如果要使其“动态”,请实现一个函数队列,并让每个函数在完成后调用队列中的下一个函数。然后,您可以通过填充队列并调用第一个函数来启动顺序进程。让每个函数在完成后调用下一个函数 function function1
setTimeout()
的循环。如何使这些函数按顺序运行而不重叠?也就是说,如何使它们在前一个完成后立即执行
function1();
function2();
function3();
function4();
让每个函数在完成后调用下一个函数
如果要使其“动态”,请实现一个函数队列,并让每个函数在完成后调用队列中的下一个函数。然后,您可以通过填充队列并调用第一个函数来启动顺序进程。让每个函数在完成后调用下一个函数
function function1(cb) {
if (someCondition) {
setTimeout(function1, 0);
} else {
// we are done
cb();
}
}
...
function1(function() {
function2(function() {
function3(function() {
function4();
});
});
});
如果要使其“动态”,请实现一个函数队列,并让每个函数在完成后调用队列中的下一个函数。然后,您可以通过填充队列并调用第一个函数来启动顺序进程
function function1(cb) {
if (someCondition) {
setTimeout(function1, 0);
} else {
// we are done
cb();
}
}
...
function1(function() {
function2(function() {
function3(function() {
function4();
});
});
});
如果你做得太深,代码会变得很混乱,所以使用一些流控制,比如。但如果不是节点,则步骤可能无法工作
简单队列可能是:
var queue = {
items: [],
add: function() {
for (var i = 0; i < arguments.length; i++) {
this.items.push(arguments[i]);
}
},
run: function() {
var this = that;
this.items.shift()(function() {
that.run();
})
}
};
queue.add(function1, function2, function3, function4);
var队列={
项目:[],
添加:函数(){
for(var i=0;i
这里,每个函数都应将函数参数done
作为其第一个参数,并且在函数完成时应调用该参数
如果你做得太深,代码会变得很混乱,所以使用一些流控制,比如。但如果不是节点,则步骤可能无法工作
简单队列可能是:
var queue = {
items: [],
add: function() {
for (var i = 0; i < arguments.length; i++) {
this.items.push(arguments[i]);
}
},
run: function() {
var this = that;
this.items.shift()(function() {
that.run();
})
}
};
queue.add(function1, function2, function3, function4);
var队列={
项目:[],
添加:函数(){
for(var i=0;i
在这里,每个函数都应将函数参数
done
作为其第一个参数,并在函数完成时调用该参数。您可以传递一个函数数组
和具有参数的函数本身作为数组
在为下一个功能设置计时器之前,每个都必须返回
function fifo(what, delay){
if(what.shift){
var a, f= what.shift() || '';
if(typeof f== 'function') f();
else if(f.constructor== Array){
a= f.splice(1, f.length);
f[0].apply(this, a);
}
if(what.length){
setTimeout(function(){
fifo(what, delay);
},
delay);
}
}
};
function announce(){
return alert(location.href)
}
var A= [[alert, 1], [alert, 2], announce, [alert, 'That\'s All!']];
fifo(A, 100);
可以传递一组函数 和具有参数的函数本身作为数组 在为下一个功能设置计时器之前,每个都必须返回
function fifo(what, delay){
if(what.shift){
var a, f= what.shift() || '';
if(typeof f== 'function') f();
else if(f.constructor== Array){
a= f.splice(1, f.length);
f[0].apply(this, a);
}
if(what.length){
setTimeout(function(){
fifo(what, delay);
},
delay);
}
}
};
function announce(){
return alert(location.href)
}
var A= [[alert, 1], [alert, 2], announce, [alert, 'That\'s All!']];
fifo(A, 100);