jQuery中的Deferred對象提供了一種簡單而靈活的方法來處理異步操作。當我們有多個異步操作需要同時完成并且需要根據所有操作的完成狀態來采取下一步行動時,jQuery里的$.when()方法可以派上用場。
$.when()方法接收若干個deferred對象(或普通的JavaScript對象和值),并返回一個新的deferred對象。這個新的deferred對象只有在所有傳入的deferred對象都完成時才會完成。如果有一個deferred對象被拒絕(即rejected),那么這個新的deferred對象也會被拒絕。
// 定義三個異步操作函數 function operation1() { var dfd = $.Deferred(); setTimeout(function(){ console.log("operation1 complete"); dfd.resolve(); }, 2000); return dfd.promise(); } function operation2() { var dfd = $.Deferred(); setTimeout(function(){ console.log("operation2 complete"); dfd.reject(); }, 3000); return dfd.promise(); } function operation3() { var dfd = $.Deferred(); setTimeout(function(){ console.log("operation3 complete"); dfd.resolve(); }, 4000); return dfd.promise(); } // 將三個異步操作組合到一起 $.when(operation1(), operation2(), operation3()) .done(function(){ console.log("all operations done"); }) .fail(function(){ console.log("one operation rejected"); });
以上代碼定義了三個異步操作函數operation1、operation2和operation3,它們分別會在2秒、3秒和4秒后完成。然后,我們使用$.when()方法將這三個異步操作組合到一起。當所有操作都完成時,控制臺會輸出"all operations done";如果其中任意一個操作被拒絕,控制臺會輸出"one operation rejected"。
下一篇修改css引擎