📜  jQuery when() 方法(1)

📅  最后修改于: 2023-12-03 15:16:46.612000             🧑  作者: Mango

jQuery when() 方法

jQuery when() 方法是一种异步操作处理机制,用于等待所有异步操作完成后再执行下一步操作。

语法
$.when([object|promise|array]).then(callbackFunction);
  • object:零个或多个需要等待处理的 Deferred 对象或普通 JavaScript 对象。
  • promise:零个或多个需要等待处理的 Promise 对象。
  • array:包含 Deferred 对象、Promise 对象或普通 JavaScript 对象的数组。
  • callbackFunction:所有异步操作完成后执行的回调函数。该函数的参数是返回结果数组,每个元素对应一个异步操作的返回值。
示例

以下示例展示了如何使用jQuery when()方法等待多个Ajax请求完成后再执行后续操作。假设有3个Ajax请求,分别是请求1、请求2和请求3。

$.when(
    $.ajax('/path/to/request1'),
    $.ajax('/path/to/request2'),
    $.ajax('/path/to/request3')
).then(function(response1, response2, response3){
    // 处理请求1的返回值
    console.log(response1);
    
    // 处理请求2的返回值
    console.log(response2);
    
    // 处理请求3的返回值
    console.log(response3);
});

假设请求1返回值为"response1",请求2返回值为"response2",请求3返回值为"response3",则在控制台输出结果如下:

response1
response2
response3
常见问题

1. What should I do if some of the requests fail?

如果某些异步请求失败,返回的结果不是Promise对象,而是一个错误对象,可使用fail()方法来处理错误。

$.when(
    $.ajax('/path/to/request1'),
    $.ajax('/path/to/request2'),
    $.ajax('/path/to/request3')
).then(function(response1, response2, response3){
    // 处理请求1的返回值
    console.log(response1);
    
    // 处理请求2的返回值
    console.log(response2);
    
    // 处理请求3的返回值
    console.log(response3);
}).fail(function(error){
    // 处理错误对象
    console.log(error);
});

2. Can I pass parameters to the callback function?

是的,可以。需要注意参数的顺序对应异步操作返回值的顺序。

$.when(
    $.ajax('/path/to/request1'),
    $.ajax('/path/to/request2'),
    $.ajax('/path/to/request3')
).then(function(response1, response2, response3){
    // 通过参数传递自定义参数
    customFunction(response1, response2, response3);
});

function customFunction(result1, result2, result3){
    // 处理自定义参数
}
总结

jQuery when() 方法是一种异步操作处理机制,用于等待所有异步操作完成后再执行下一步操作。它可以接收多个Deferred对象、Promise对象或普通JavaScript对象作为参数,并返回一个新的Deferred对象,等待所有异步操作完成后再执行回调函数。可以使用done()方法处理异步操作完成后的结果,使用fail()方法处理错误结果,还可以向回调函数传递自定义参数。