比方說,我有4個功能,每個功能都與setTimeout()
工作內部循環。如何讓這些功能按順序運行並且不重疊?也就是說,我怎樣才能讓他們每一個都在剛剛完成之後執行?如何使用setTimeout()函數按順序工作?
function1();
function2();
function3();
function4();
比方說,我有4個功能,每個功能都與setTimeout()
工作內部循環。如何讓這些功能按順序運行並且不重疊?也就是說,我怎樣才能讓他們每一個都在剛剛完成之後執行?如何使用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();
});
});
});
的代碼並開始越來越混亂,如果你去太深所以使用某種類型的流量控制像Step
。如果它不是節點,步驟可能不起作用。
一個簡單的隊列可能是:
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);
這裏,每個函數應該接受一個函數參數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);
之前每個人都必須返回