javascript函数等待另一个函数完成

标签 javascript jquery callback jquery-deferred

我有两个从 android 调用的 javascript 函数。经过长时间的调试 session 后,我终于意识到问题是由于第二个函数在第一个函数完成之前被调用而引起的。我已经用 deferred 等搜索了示例,但它们都依赖于另一个示例中的函数调用。

function FunctInit(someVarible){ //someVariable is sent from android, cannot call again from getResult
//init and fill screen
}

function getResult(){ //also getResult need to be called from android via button
//return some variables
}

如何强制 getResult 等待 FuncInit?有没有办法通过 Javascript 实现这一点?

最佳答案

在我看来,延迟/ promise (如您所提到的)是可行的方法,而不是使用超时。

这是一个 example我刚刚写的是为了演示如何使用 deferreds/promises 来做到这一点。

花点时间玩转 deferreds。一旦真正理解了它们,执行异步任务就会变得非常容易。

希望这对您有所帮助!

$(function(){
    function1().done(function(){
        // function1 is done, we can now call function2
        console.log('function1 is done!');

        function2().done(function(){
            //function2 is done
            console.log('function2 is done!');
        });
    });
});

function function1(){
    var dfrd1 = $.Deferred();
    var dfrd2= $.Deferred();

    setTimeout(function(){
        // doing async stuff
        console.log('task 1 in function1 is done!');
        dfrd1.resolve();
    }, 1000);

    setTimeout(function(){
        // doing more async stuff
        console.log('task 2 in function1 is done!');
        dfrd2.resolve();
    }, 750);

    return $.when(dfrd1, dfrd2).done(function(){
        console.log('both tasks in function1 are done');
        // Both asyncs tasks are done
    }).promise();
}

function function2(){
    var dfrd1 = $.Deferred();
    setTimeout(function(){
        // doing async stuff
        console.log('task 1 in function2 is done!');
        dfrd1.resolve();
    }, 2000);
    return dfrd1.promise();
}

关于javascript函数等待另一个函数完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655851/

相关文章:

javascript - Qualtrics 通过创建新按钮将文本输入存储到嵌入数据

javascript - 如何在 javascript 中正确循环表单元素

javascript - 如何让正则表达式在某个字符处停止

javascript - 通过参数将php变量传递给javascript触发函数、PHP、JAVASCRIPT

javascript - 如何使用 Bacon.js 返回 ajax 响应对象?

jQuery 星级评定

node.js - 为什么 mongoose.model.create 的回调不是从 Express 3.x HTTP 请求处理程序中执行(实际上 connect-mongodb 是原因)

具有多个客户端的 WCF 回调

javascript - 是否可以更改 p 中特定值的样式?

javascript - 使用 Promise 设置一个变量以从回调函数中获取返回值