等待异步javascript函数

时间:2014-04-13 08:07:43

标签: javascript asynchronous

我已经看到有关此问题的类似问题。我对javascript很陌生,我无法弄清楚。

我有一个调用另一个函数的函数。

sayHello()有一个异步调用。

var hello_message = null;

function invokeSayHello(msg) {
    sayHello(msg);
    //next action
    return hello_message;
} 

function sayHello(msg) {
    // simulate async call 
    setTimeout(function(){hello_message = msg + " World";},1000);
}

在这种情况下,hello_message返回null。在invokeSayHello()函数中执行下一个操作行之前,我将如何等待异步调用完成,以便返回的hello_message不为null。

我想我应该使用回调但不知道该怎么做..另外,我使用executeScript()/ Selenium从java文件调用invokeSayHello()

感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

您应该在回调中使用结果 。您不能/不应该等待异步功能完成。异步模式假定您使用回调。

像这样:

function invokeSayHello(msg) {
    sayHello(msg);
} 

function sayHello(msg) {
    // simulate async call 
    setTimeout(function(){
        var hello_message = msg + " World";

        // Here you can process the result, like alerting it for example or
        // passing it to another function
        alert(hello_message);
    }, 1000);
}

所以基本上在异步编程中你忘记了关键字 return 并开始将回调传递给你的javascript函数,这样调用者就可以订阅那些回调以及他想对回调中的结果做什么..