Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript链接多个函数_Javascript_Jquery - Fatal编程技术网

JavaScript链接多个函数

JavaScript链接多个函数,javascript,jquery,Javascript,Jquery,JavaScript中的Newbe, 我有4个功能,比如: function funct1(){ //dosomething(); } function funct2(){ //dosomething(); } function funct3(){ //dosomething(); } function funct4(){ //dosomething(); } 我想先演示funct1,然后是funct2和funct3。 但我确实希望funct4只在func

JavaScript中的Newbe, 我有4个功能,比如:

function funct1(){
    //dosomething();
}

function funct2(){
    //dosomething();
}

function funct3(){
    //dosomething();
}

function funct4(){
    //dosomething();
}
我想先演示funct1,然后是funct2和funct3。 但我确实希望funct4只在funct2和funct3完成后执行! 我怎样才能做到这一点,我想有更好的方法来做到这一点

我尝试过这个,但不太确定运行的是什么

function foo(callback){
    funct1;
    funct2;
    funct3;
    callback();
}

function bar(){
    foo(funct4);
}

您可以通过以下方式完成此操作:

$.when(funct1).then(funct2).then(funct3).then(funct4)
jQuery有自己的承诺实现,请看一下文档或类似的教程

如果您的一个(或所有)函数是异步的,鉴于您已经用jQuery标记了您的问题,您可以使用承诺

function funct1(){
    var dfd = $.Deferred();
    //Inside some async function, eventually:
    dfd.resolve();
    //More code
    return dfd.promise();
}
然后,您可以按照Victor的回答将函数菊花链连接在一起。
如果需要等待多个承诺完成(并并行运行多个承诺),可以使用

$.when(funct1, funct2).done(function (arg1, arg2) {
});

这将执行您想要的操作,除了在funct1,2,3之后需要
()
s,因此它们实际上是被执行的:
funct1();funct2();funct3();回调()这取决于
dosomething()
是什么。它是异步的吗?我不确定你是否知道你到底想问什么。这听起来可能是个有趣的问题。还没有。也许你可以举几个真实的例子来说明你打算做什么,在那里你遇到了你要问的问题。函数是异步的,有一些调用$Ajaxemanuel Delay,谢谢你。我正在绘制一个仪表板,在某些情况下,需要绘制数据由funct4生成$Ajax,数据由funct2和funct4填充。由于异步执行,我遇到了错误,这就是为什么我要确保在执行func4之前func2和funct 3已终止。不知道是否更清楚!是的,所有的函数都是异步的,这似乎就是我想要的。我要试试看!