我正在与一个更改并保存外部文件的 servlet 进行通信。由于这需要一些时间,我需要一些 javascript 函数调用按顺序发生,以便一个函数的操作不会干扰另一个函数的操作。
为此,我编写了一个“顺序”函数,它接受另一个函数,该函数只能在 busyflag 设置为 false 时调用(即,当没有其他函数调用同时处理时)。这是我的代码:
var busy = false;
function sequential(action) {
while(busy)
setTimeout(function(){sequential(action);}, 10);
busy = true;
action();
setTimeout(function(){busy = false;}, 100);
}
function test1() {sequential(function() {alert("test1");});}
function test2() {sequential(function() {alert("test2");});}
和this是 jsFiddle 上的例子。由于某种原因,这段代码在第二次调用时不断循环(当函数调用必须等待时)。
最佳答案
while(busy)
setTimeout(function(){sequential(action);}, 10);
setTimeout
不会阻塞,它立即返回并允许循环继续。 JavaScript 是单线程的,因此这个循环只是继续运行并阻止任何其他代码执行,这意味着 busy 永远不会设置为 false 来退出循环。
假设您正在等待的这些事情是 ajax
调用,您可能需要使用某种队列,然后在 ajax
调用的回调中运行下一个请求。
关于javascript - 顺序函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505176/