javascript - 在不同函数中调用异步函数是否仍会导致异步行为?

标签 javascript ajax function asynchronous

假设我有多个函数 func1func2func3 等......

它们都包含一个 AJAX/async 函数:

函数 funcX(){ //一些ajax请求 }

如果在主函数中,我依次调用 func1func2func3,如下所示:

$(document).ready(function(){ 

      func1();
      func2();
      func3();
      ...
}

每个 ajax/async 函数的调用是否一定会按其父函数的顺序执行?起初我认为它们可能是,但我的程序的行为似乎暗示并非如此......

如果没有,是否有一个好的(希望简单?)替代长链回调的方法?

最佳答案

Will each ajax/async function's call be certain to execute in the order of their parent functions?

它们应该按顺序执行,但它们的内部回调可以按任何顺序调用。

If not, is there a good (hopefully simple?) alternative to having a long chain of callbacks?

你可以使用 promise ,并在 promise 已解决时执行下一个功能。

这个例子使用了 jQuery...

var fn1 = function () {
    var d = $.Deferred();
    setTimeout(function () {
        $("body").text("Callback 1 done.") && d.resolve();
    }, Math.random() * 1300 + 800);
    return d.promise();
};

var fn2 = function () {
    var d = $.Deferred();
    setTimeout(function () {
        $("body").text("Callback 2 done.") && d.resolve();
    }, 500);
    return d.promise();
};

$.when(fn1(), fn2()).then(function () {
    setTimeout(function () {
        $("body").text("All done.");
    }, 300);
});

jsFiddle .

我们使用 $.when() 并将我们要执行的调用函数传递给它。然后我们使用 then() 来显示最终消息(我在这里放置了一个 setTimeout() 以便您可以在文档中看到最后解析的函数的消息)。

这些函数中的每一个都有自己的返回 promise 的延迟对象。为举例起见,setTimeout() 模拟 XHR。执行此回调时,我们解析延迟对象。

一旦两者都被推迟,我们就会到达 then() 的回调。

关于javascript - 在不同函数中调用异步函数是否仍会导致异步行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438289/

相关文章:

c++ - 如何使用 Struct 打印我的交换函数

javascript - Mobx 对计算属性调用操作

javascript - 有没有办法让 keydown 监听器即使在关注外部 iframe 时也能工作?

javascript - 计算一个字符串在另一个字符串中出现的次数

javascript - 如果页面在 JavaScript 执行期间关闭会发生什么?

javascript - angularjs防止XSS攻击

javascript - 如何使用 AJAX 从 jsp 中的 servlet 检索多个值

javascript - ajax完成后重新绑定(bind)

c++ - 选择创建普通函数或类私有(private)成员函数

javascript - 如何将变量传递给我的回调函数或类似函数