在返回之前等待异步完成

时间:2014-11-21 19:09:51

标签: jquery jquery-deferred

是否可以安全地等待异步请求完成,然后从函数返回值。这样的事情会不会引起任何问题。

使用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

2 个答案:

答案 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");
})