這取決於你是否要#notifyState是否使用setTimeout。如果您不需要的setTimeout那麼你只需要重新編寫如下:
var notifyState = function(state) {
/* Do something */
}
notifyState('State 1');
notifyState('State 2');
如果你想保持的setTimeout和鏈的呼叫,這樣,第二則通知後的第一個執行,你必須提供一個回調:
var notifyState = function(state, callback) {
setTimeout(function() {
/* Do something */
if (callback) {
callback();
}
}, 2000);
}
notifyState('State 1', function() {
notifyState('State 2');
});
編輯
看來,OP的問題是不同的。我的理解是,您正在提供#notifyState函數作爲您不控制的第三方Flash的回調函數,並且您要確保對notifyState的調用以相同的順序執行並且一個接一個地執行,所以您不需要有2個並行呼叫notifyState同時運行。爲了達到這個目的,你需要引入一個隊列來保持狀態,並改變函數的執行方式,使得當時只能執行一個狀態。我會假設你需要setTimeout在這裏很重要,並保持這種方式。請參閱下面的代碼:
var Queue = [],
running = false;
var notifyState = function(state) {
if (running) {
Queue.push(state);
} else {
running = true;
setTimeout(function() {
/* Do something */
running = false;
var nextState = Queue.pop();
if (nextState) {
notifyState(nextState);
}
}, 2000);
}
}
「回調」時間 – Praveen
首先...在javascript中沒有多線程,所以你的函數將總是按順序運行,但你不知道按什麼順序 – SOReader
@PraveenJeganathan:如果OP只能修改'notifyState'函數,回調不起作用 – musefan