这取决于你是否要#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