Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.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_Callback - Fatal编程技术网

Javascript 等待函数完成调用其他函数

Javascript 等待函数完成调用其他函数,javascript,callback,Javascript,Callback,我有一个调用另一个函数2的函数1。Function2有一个for循环,它在其中调用function3。我想在对函数3的所有3个调用完成后执行一条语句。我如何做到这一点 function1: function(){ function2(args, doSomething(returnValue) { if(returnValue == true){ // do something here } }); } function2

我有一个调用另一个函数2的函数1。Function2有一个for循环,它在其中调用function3。我想在对函数3的所有3个调用完成后执行一条语句。我如何做到这一点

function1: function(){
    function2(args, doSomething(returnValue) {
        if(returnValue == true){
            // do something here
        }
    });
}

function2: function(args, callback){
    for(var i = 0; i < 3; i++){
        function3(args);
    }

    // if function3 completed all 3 times
    callback(true);
}
function1:function(){
函数2(参数、剂量测量(返回值){
if(returnValue==true){
//在这里做点什么
}
});
}
函数2:函数(参数、回调){
对于(变量i=0;i<3;i++){
功能3(args);
}
//如果功能3全部完成3次
回调(true);
}

我认为您所需要做的就是在
function2()
中每次运行for循环时生成一个递增的变量,并检查它在for循环之外是否足够高

var timesCalled = 0
function1: function(){
    function2(args, doSomething(returnValue) {
        if(returnValue == true){
            // do something here
        }
});
}
function2: function(args, callback){
    for(var i = 0; i < 3; i++){
        function3(args);
        timesCalled++
    }

    if (timesCalled >= 2){// if function3 completed all 3 times
        callback(true);
    }
}
var timesCalled=0
函数1:函数(){
函数2(参数、剂量测量(返回值){
if(returnValue==true){
//在这里做点什么
}
});
}
函数2:函数(参数、回调){
对于(变量i=0;i<3;i++){
功能3(args);
时报++
}
if(timesCalled>=2){//if函数3全部完成3次
回调(true);
}
}

如果您想确保function3执行您希望的3次操作,那么将增量放入function3中。我希望这有帮助

谷歌关键词:promises@zerkms这是Harmony(ECMAScript 6)提案的一部分。我想要支持所有主要浏览器的东西。你认为它会起作用吗?有大量ES5库。对
function3()
的调用将完成执行。在你的问题中,
function3
如何表示它已经完成了一项异步任务还不清楚。承诺并不是什么神奇的东西。它们只是一种设计模式。因此,它们可以用javascript实现。为了弄清楚它们是如何工作的,我自己实现了一个promise库。所以承诺是纯javascript的,不需要更新语言或解释器。ES6中的承诺基本上是对标准库(包括数学对象、DOM等)的补充