gpt4 book ai didi

javascript - 等到功能完成

转载 作者:搜寻专家 更新时间:2023-11-01 05:12:11 27 4
gpt4 key购买 nike

在调用完成之前执行函数的最佳方式是什么?

示例 JavaScript 函数:

var notifyState = function(state) {
setTimeout(function () {
/*Do something*/
}, 2000);
};

然后我调用函数两次:

notifyState('State1');
notifyState('State2');

这个函数并行执行。按顺序执行它们的最佳方法是什么?我只能修改 notifyState 函数。 notifyState 只能通过一个参数执行。

更新:函数 notifyState 通知 flash 游戏中的实际状态。它将它保存在 html 代码中,当状态改变时状态被覆盖。在 selenium 测试中,我从 html 代码下载状态,但是状态变化太快以至于 selenium 没有注意到这一点,所以我尝试了 sleep JavaScript。

最佳答案

这取决于您是否希望#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 函数作为对您无法控制的第 3 方 Flash 的回调,并且您希望确保对 notifyState 的调用以相同的顺序一个接一个地执行,因此您不会同时运行 2 个对 notifyState 的并行调用。为此,您需要引入一个队列来保持状态并更改 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);
}
}

关于javascript - 等到功能完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995315/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com