gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:29:57 24 4
gpt4 key购买 nike

假设我有多个函数 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com