有4个功能......
function fn1()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 1<br/>');
},5000);
}
function fn2()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 2<br/>');
},4000);
}
function fn3()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 3<br/>');
},3000);
}
function fn4()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 4<br/>');
},1000);
}
现在,当我在我的按钮点击事件中逐个调用它们时,它不起作用。按钮单击事件 -
$("#cmd_sync_tally").click(function(event){
event.preventDefault();
fn1();
fn2();
fn3();
fn4();
});
结果应该像第一个函数1执行&amp;写入值,然后写入函数2,依此类推。
Calling from function 4
Calling from function 3
Calling from function 2
Calling from function 1
我想知道,如何使这些调用顺序进行,以便函数一个接一个地执行。
答案 0 :(得分:2)
所有功能都是同时编程的,这是超时计数的开始。
如果你想要按顺序调用同时编程的函数,最干净的解决方案就是将它们链接起来:
function fn1() {
setTimeout(function() {
$("#div_result_area").append('Calling from function 1<br/>');
f2();
},5000);
}
您可以使用回调模式:
function fn1(callback) {
setTimeout(function() {
$("#div_result_area").append('Calling from function 1<br/>');
callback();
},5000);
}
...
fn1(function(){
fn2(function(){
fn3(fn4)
});
});
你也可以定义你的超时,以便他们加起来:
var time = 0;
function fn1() {
setTimeout(function()
{
$("#div_result_area").append('Calling from function 1<br/>');
},time+=5000);
}
function fn2()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 2<br/>');
},time+=4000);
}
etc.
但是如果你这么做很多,你想要排队的函数更多,那么最好是实现一个队列,就像在jQuery中一样。您可以在this related question中看到这样的实现。
答案 1 :(得分:0)
正在以正确的顺序调用您的函数,但超时导致它们以相反的顺序发生,因为所有超时都是在脚本运行时几乎完全相同的时间设置的。
换句话说,您可以同时设置和运行4个单独的超时。
要获得你正在寻找的效果,你应该在超时时从上一个函数中调用每个函数。
function fn1()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 1<br/>');
fn2();
},5000);
}
function fn2()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 2<br/>');
fn3();
},4000);
}
function fn3()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 3<br/>');
fn4();
},3000);
}
function fn4()
{
setTimeout(function()
{
$("#div_result_area").append('Calling from function 4<br/>');
},1000);
}
$("#cmd_sync_tally").click(function(event){
event.preventDefault();
fn1();
});
在我的jsfiddle.
上查看一个工作示例看起来您希望这些功能分开执行1秒,因此如果这是您的目标,则必须将所有超时更改为1000.