新聞中心
jQuery Deferred 對象是 jQuery 中的一個核心概念,它用于處理異步操作,Deferred 對象表示一個尚未完成但預(yù)計在未來完成的異步操作,它可以幫助我們更好地管理異步任務(wù),AJAX 請求、事件處理等,本文將詳細(xì)介紹如何使用 jQuery Deferred。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比德清網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式德清網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋德清地區(qū)。費用合理售后完善,10多年實體公司更值得信賴。
1、基本概念
在介紹 jQuery Deferred 的使用方法之前,我們先了解一下它的幾個基本概念:
Promises(承諾):一個 Promise 是一個具有兩個狀態(tài)的對象,即已完成(fulfilled)和未完成(pending),當(dāng)一個異步操作完成時,Promise 的狀態(tài)會從 pending 變?yōu)?fulfilled,或者從 pending 變?yōu)?rejected。
Deferred(延遲):Deferred 對象表示一個尚未完成但預(yù)計在未來完成的異步操作,它有兩個狀態(tài):已完成(resolved)和未完成(pending),當(dāng)一個異步操作完成時,Deferred 的狀態(tài)會從 pending 變?yōu)?resolved,或者從 pending 變?yōu)?rejected。
Promises/Deferred API(承諾/延遲 API):Promises/Deferred API 提供了一套方法來處理 Promises 和 Deferred 對象,以便我們可以更好地管理異步任務(wù)。
2、Deferred 對象的創(chuàng)建
要創(chuàng)建一個 Deferred 對象,我們可以使用 $.Deferred() 構(gòu)造函數(shù)。
var dfd = $.Deferred();
3、Deferred 對象的方法
jQuery Deferred 對象提供了以下方法來處理異步任務(wù):
done(function): 當(dāng) Deferred 對象的狀態(tài)從 resolved 變?yōu)?done 時,執(zhí)行指定的回調(diào)函數(shù)。
dfd.done(function() {
console.log('異步操作已完成');
});
fail(function): 當(dāng) Deferred 對象的狀態(tài)從 rejected 變?yōu)?fail 時,執(zhí)行指定的回調(diào)函數(shù)。
dfd.fail(function() {
console.log('異步操作失敗');
});
always(function): 無論 Deferred 對象的狀態(tài)是從 resolved 還是 rejected 變?yōu)?done,都會執(zhí)行指定的回調(diào)函數(shù)。
dfd.always(function() {
console.log('異步操作已結(jié)束');
});
then(successCallback, errorCallback): Deferred 對象的狀態(tài)從 resolved 變?yōu)?done,則執(zhí)行 successCallback 回調(diào)函數(shù);Deferred 對象的狀態(tài)從 rejected 變?yōu)?done,則執(zhí)行 errorCallback 回調(diào)函數(shù)。
dfd.then(function() {
console.log('異步操作成功');
}, function() {
console.log('異步操作失敗');
});
4、Promises API(承諾 API)的使用
除了使用 Deferred 對象的方法之外,我們還可以使用 Promises API 來處理異步任務(wù),Promises API 提供了以下方法:
promise(): 返回一個 Promise 對象。
var promise = dfd.promise();
resolve(value): 如果傳入的值是一個 Promises/Deferred 對象,那么它將被原樣返回;否則,返回一個新的 Promise 對象,其狀態(tài)為 resolved,并將傳入的值作為結(jié)果。
promise.resolve(1); // Promise {state: "resolved", value: 1}
reject(reason): 如果傳入的值是一個 Promises/Deferred 對象,那么它將被原樣返回;否則,返回一個新的 Promise 對象,其狀態(tài)為 rejected,并將傳入的值作為原因。
promise.reject(new Error('出錯了')); // Promise {state: "rejected", reason: Error}
5、Deferred 對象的鏈?zhǔn)秸{(diào)用
我們可以使用鏈?zhǔn)秸{(diào)用的方式來處理多個異步任務(wù)。
$.ajax({url: 'test.txt', success: function() {
console.log('請求成功');
}}).done(function() {
console.log('請求完成后的操作');
}).fail(function() {
console.log('請求失敗后的操作');
});
6、Deferred 對象的鏈?zhǔn)秸{(diào)用示例(Promises API)
我們也可以使用 Promises API 來進(jìn)行鏈?zhǔn)秸{(diào)用。
var promise = $.ajax({url: 'test.txt'}).promise();
promise.then(function() {
console.log('請求成功');
}).then(function() {
console.log('請求完成后的操作');}).catch(function() {
console.log('請求失敗后的操作');});
文章標(biāo)題:jquerydefer怎么用
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/copggsp.html


咨詢
建站咨詢
