如果我理解了你的問題,你放入列表中的每個函數都可以有一個標誌,表示「等待執行我,直到執行完所有先前的函數」。因此,您需要做的是將函數計數和代碼添加到您執行的每個函數中以減少計數。像這樣的東西,我把副本的jsfiddle here:
var funcCount = 0, funcList = [];
function executeFunctions() {
var nextFunc;
while (funcList.length > 0) {
// Check next in list, if we need to wait, make sure we wait
nextFunc = funcList[0];
if (nextFunc.needToWait) {
if (funcCount > 0) {
// Try again later
setTimeout(executeFunctions, 100);
return;
}
}
// Since we are now going to execute, remove from list and execute
funcList.splice(0, 1);
funcCount += 1; // nextFunc will subtract 1 on completion
setTimeout(nextFunc, 100);
}
}
// For async functions to call back to completion
function completionCallback() {
funcCount -= 1;
}
爲了測試它,我已經定義了兩種功能。第一個模擬了超長超時的異步。第二個設置了等待標誌,所以需要等待第一個。然後我他們兩個添加到列表中,並對其進行測試:
// Example function 1 is simulated async
function example1() {
alert("Example1");
// Simulate async call with completion callback function, e.g. XHttpRequest
setTimeout(completionCallback, 2000);
}
example1.needToWait = false; // Not flagged
// Example function is flagged as need others to complete first
function example2() {
alert("Example2");
funcCount -= 1;
}
example2.needToWait = true;
// Setup function list to execute example1 then example2
funcList.push(example1);
funcList.push(example2);
// OK, test it
executeFunctions();
如果你改變了函數2標誌設置爲false,警示框顯示了一前一後,馬上。如果將其保留爲true,則第二個不會顯示,直到2秒鐘過去。
谷歌'jquery推遲' – BNL
我已經做到了,但找不到適合我的情況。 –
什麼是'i','idx'和'ref'?告訴我們關於那些「funcn」物品 – Bergi