如何在调用异步调用(如Ajax)时等待代码

这个问题在这里已经有了答案:

  • 如何返回来自异步调用的响应? 33个答案

  • 使用回调。 像这样的东西应该基于你的示例代码工作。

    function someFunc() {
    
    callAjaxfunc(function() {
        console.log('Pass2');
    });
    
    }
    
    function callAjaxfunc(callback) {
        //All ajax calls called here
        onAjaxSuccess: function() {
            callback();
        };
        console.log('Pass1');    
    }
    

    这将打印Pass1立即(假设AJAX请求采用ATLEAST几微秒),然后打印Pass2的时onAjaxSuccess被执行。


    为什么它不适用于使用Deferred Objects ? 除非我误解了某些东西,否则这可能对您有用。

    /* AJAX success handler */
    var echo = function() {
        console.log('Pass1');
    };
    
    var pass = function() {
      $.when(
        /* AJAX requests */
        $.post("/echo/json/", { delay: 1 }, echo),
        $.post("/echo/json/", { delay: 2 }, echo),
        $.post("/echo/json/", { delay: 3 }, echo)
      ).then(function() {
        /* Run after all AJAX */
        console.log('Pass2');
      });
    };​
    

    在这里看到它


    UPDATE

    根据您的输入,似乎您最快的选择是使用同步请求。 您可以在$.ajax请求中将属性async设置为false以使其阻塞。 这将挂起你的浏览器,直到请求完成。

    注意我不建议这样做,我仍然认为你应该在基于事件的工作流程中修复你的代码而不依赖它。


    真正的程序员用信号量做到这一点。

    有一个变量设置为0 。 在每次AJAX调用之前增加它。 在每个成功处理器中减少它,然后测试0 。 如果是,你就完成了。

    链接地址: http://www.djcxy.com/p/9475.html

    上一篇: How to make code wait while calling asynchronous calls like Ajax

    下一篇: Returning a value from callback function in Node.js