我已经看到有关此问题的类似问题。我对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()
感谢所有帮助。
答案 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函数,这样调用者就可以订阅那些回调以及他想对回调中的结果做什么..