是否可以安全地等待异步请求完成,然后从函数返回值。这样的事情会不会引起任何问题。
使用jQuery
function test()
{
var $request = ...; //Async promise
var done = false;
while(!done)
{
$request.always(function(){
done = true ;
}) ;
}
return true ;
}
[更新]正如@Ninsly指出的那样,javascript只有一个线程,所以使用循环不是一个选项。
复制 JavaScript asynchronous return value / assignment with jQuery
答案 0 :(得分:0)
您可以使用同步Ajax请求。 将async选项指定为false以获取同步Ajax请求。 然后你的回调可以在父函数继续之前设置一些数据。
test: function(){
jQuery.ajax({
url: '...',
success: function(response) {
if(response.bOk == false)
alert(response.content);
//you could return some here
},
async: false
});
}
小心,如果您要使用它,您可以阻止/锁定所有其他处理,直到完成... 就像在PHP中做无穷无尽一样。因此,如果您要求不结束..这将导致一些小问题:)
答案 1 :(得分:-1)
你应该在异步函数中使用回调.... smth喜欢jQuery .done
$request.done(function( data ) {
console.log("ready");
})