jquery - 返回之前等待异步完成

标签 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

最佳答案

您可以使用同步 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 中无休止地做一样。所以如果你的请求没有结束..这会导致一个小问题:)

关于jquery - 返回之前等待异步完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27068567/

相关文章:

javascript - 类型错误 : d is null

jquery - Angular 中的 jQuery.when() 相当于什么

javascript - 等到 jQuery 中的多个函数(内部可能调用或不调用 ajax)完成?

javascript - 等待 JS 函数中的异步调用结束。 (jQuery.延迟?)

jquery - CSS 选择器有效,jquery 选择器无效(仅 IE 问题)

jquery - 如何用jquery改变onclick事件?

jquery - 使用jquery、ajax提交表单,无法获取成功回调

javascript - 替换与正则表达式匹配的单元格的内部 html

javascript - 内部请求失败导致父请求失败

javascript - jQuery.when 接受原生 Promise 对象吗?