$.when
和$.deferred
是 jQuery 提供的工具,用于处理异步操作的结果,尤其是当你需要协调多个异步操作(如 AJAX 请求)时非常有用。它们允许你在所有异步操作完成后执行某些操作,并能够更好地管理复杂 的异步逻辑。
$.deferred
$.deferred
是 jQuery 的延迟对象,允许你创建一个可以手动触发的异步操作。它类似于其他语言中的 Promise,可以用来协调多个异步操作。
创建 Deferred 对象:
var deferred = $.Deferred();
触发完成或失败:
deferred.resolve(); // 标记为完成
deferred.reject(); // 标记为失败
处理完成或失败的回调:
deferred.done(function() {
console.log("操作成功");
}).fail(function() {
console.log("操作失败");
});
$.when
$.when
是 jQuery 的一个方法,用于处理多个异步操作的结果。它可以接受一个或多个 deferred 对象或其他可以被转换成 Promise 的对象,并返回一个新的 deferred 对象,代表所有传入的异步操作完成后的状态。
等待多个异步操作完成:
$.when(promise1, promise2).done(function(result1, result2) {
console.log("所有操作成功:", result1, result2);
}).fail(function() {
console.log("某些操作失败");
});
apply
apply
是 JavaScript 的一个内置方法,它允许你以数组形式传递参数。这在需要将数组内容作为多个参数传递给函数时非常有用。
当你有一个数组(比如多个 AJAX 请求的数组),并希望将这些请求传递给 $.when
,你可以使用 apply
将数组元素作为单独的参数传递。
// 创建多个 AJAX 请求
var requests = [
$.ajax({ url: "/api/endpoint1" }),
$.ajax({ url: "/api/endpoint2" }),
$.ajax({ url: "/api/endpoint3" })
];
// 使用 $.when 和 apply 等待所有请求完成
$.when.apply($, requests).done(function(response1, response2, response3) {
// 所有请求成功完成
console.log("请求结果:", response1, response2, response3);
}).fail(function() {
// 其中一个或多个请求失败
console.log("至少一个请求失败");
});