首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jquery中顺序调用多个函数

在jquery中顺序调用多个函数
EN

Stack Overflow用户
提问于 2013-02-04 18:08:46
回答 2查看 3.1K关注 0票数 0

可能重复: 方法链中对下一个函数的延迟

有四个功能..。

代码语言:javascript
复制
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);
}

现在,当我在我的按钮点击事件调用这些,一个一个,它不工作。按钮点击事件-

代码语言:javascript
复制
$("#cmd_sync_tally").click(function(event){
    event.preventDefault();
    fn1();
    fn2();
    fn3();
    fn4();
});

结果应该是第一个函数1执行&写入值,然后是函数2等等。

代码语言:javascript
复制
Calling from function 4
Calling from function 3
Calling from function 2
Calling from function 1

我想知道,如何使这些调用是连续的,这样函数就可以一个接一个地执行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-04 18:10:16

您的所有功能都是同时编程的,这是从超时计数开始的。

如果您想同时调用编程函数,那么最干净的解决方案是将它们链接起来:

代码语言:javascript
复制
function fn1() {   
    setTimeout(function() {
        $("#div_result_area").append('Calling from function 1<br/>');
        f2();
    },5000);
}

您可以为此使用回调模式:

代码语言:javascript
复制
function fn1(callback) {   
    setTimeout(function() {
        $("#div_result_area").append('Calling from function 1<br/>');
        callback();
    },5000);
}
...
fn1(function(){
   fn2(function(){
      fn3(fn4)
   });
});

您还可以定义超时,以便它们加在一起:

代码语言:javascript
复制
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中所做的那样。您可以在这个相关的问题中看到这样的实现。

票数 2
EN

Stack Overflow用户

发布于 2013-02-04 18:31:22

您的函数正在按正确的顺序调用,但超时导致它们以相反的顺序发生,因为所有超时都是在脚本运行时几乎完全相同的时间设置的。

换句话说,您有4个单独的超时设置和运行在同一时间。

要获得所寻找的效果,您应该在超时时从前面的函数中调用每个函数。

代码语言:javascript
复制
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();
});

参见我的小小提琴。中的一个工作示例

看起来,您希望这些函数间隔1秒执行,因此如果您的目标是1000,则必须将所有超时更改为1000。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14692776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档