gpt4 book ai didi

javascript - jQuery Deferred - 向 Deferred 契约(Contract)添加回调

转载 作者:行者123 更新时间:2023-11-29 18:26:27 26 4
gpt4 key购买 nike

我正在尝试在现有 Deferred 的状态设置为成功之前向其契约(Contract)添加另一个异步调用。与其尝试用英语解释这一点,不如看下面的伪代码:

$.when(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 1 done.')
jqXhr.pipe(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 2 done.');
},
})
);
},
}),
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 3 done.');
},
})
).then(function(){ console.log('All done!'); });

基本上,调用 2 取决于调用 1 的结果。我希望调用 1 和调用 3 并行执行。完成所有 3 个调用后,我希望执行 All Done 代码。我的理解是 Deferred.pipe() 应该将另一个异步调用链接到给定的延迟,但实际上,我总是在 All Done 之后完成调用 2。

有谁知道如何让 jQuery 的 Deferred 做我想做的事?希望解决方案不会进一步将代码拆分成 block 。

感谢您的帮助。

更新:请查看我的 follow up question .

最佳答案

您必须在第一个 $.ajax 调用返回的延迟对象上调用 .pipe,而不是在它的成功回调中(这根本没有任何效果):

$.when(
$.ajax({
// ...
}).pipe(function() {
// return a deferred object from .pipe
return $.ajax({
// ...
});
}),
$.ajax({
// ...
})
).done(function(){ console.log('All done!'); });

.pipe 返回一个新的延迟对象,只有在原始延迟对象和返回的对象都被解析后才会被解析。

关于javascript - jQuery Deferred - 向 Deferred 契约(Contract)添加回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12643065/

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