我正在尝试使用 jQuery.Deferrd 对象同步多个 ajax 回调。显然 jQuery.when 会为您处理这个问题,但是我的代码的架构方式是不会以相同的方法调用 ajax 请求。例如,这是流程:
// 一个按钮被点击
// 模块 1 请求一段 html 并更新 DOM
// 模块 2 请求不同的 html 片段并更新 DOM
我需要两个模块同时更新 DOM,这意味着我需要确保在两个请求都返回后运行回调。
模块 1 和模块 2 需要能够彼此独立存在,并且不应该相互了解,因此无法使用 $.when(doMod1Request(), doMod2Request()).then(function () 一起发出请求{ ... }) 并且回调也应该是独立的。
因此,我编写了一个围绕 ajax 的包装器,它将回调添加到延迟对象,并以与 $.when 类似的方式在 ajax 请求返回与延迟对象上的回调次数相同的次数后解析延迟对象.
然而,我的困境是 deferred.resolve() 只能用一组参数调用,所以每个回调都得到相同的值。
例如
var deferred = new $.Deferred();
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-1"></div>
});
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-1"></div>
});
deferred.resolve('<div class="html-snippet-1"></div>');
而我想要这样的东西:
var deferred = new $.Deferred();
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-1"></div>
});
deferred.done(function (response) {
console.log(response); // <div class="html-snippet-2"></div>
});
deferred.resolve(['<div class="html-snippet-1"></div>', '<div class="html-snippet-2"></div>']);
这是可能的还是我做错了?