jQuery中always()方法用于為一個deferred對象添加一個回調,該回調將總是被調用,無論deferred是成功還是失敗。
$.ajax({ url: "api/data", dataType: "json" }) .done(function(data) { console.log("成功獲取數據!"); }) .fail(function() { console.log("獲取數據失敗!"); }) .always(function() { console.log("無論成功還是失敗都會執行的回調函數"); });
上述代碼中,可以看到always()方法被用于添加一個回調函數,該回調函數無論成功或失敗都會被調用。
而如果使用它進行鏈式調用,回調函數的參數將會被傳遞到下一個then()或done()方法中去,這是一個常用的操作。
$.ajax({ url: "api/data", dataType: "json" }) .then(function(data) { console.log("成功獲取數據!"); return data; }, function() { console.log("獲取數據失敗!"); }) .always(function(data) { console.log("無論成功還是失敗都會執行的回調函數"); }) .done(function(data) { console.log("處理數據..."); }) .fail(function() { console.log("處理數據失敗!"); });
上述代碼中,我們可以看到,回調函數的參數data被傳遞到了下一個then()方法中,實現了鏈式操作。
這里需要注意的是,如果前面的回調函數沒有返回值,則下一個then()方法中的參數將是undefined。
總結一下,always()方法可以為deferred對象添加一個無論成功或失敗都會被調用的回調函數,可以用于鏈式操作,并且可以傳遞回調函數的參數到下一個then()或done()方法中。