jQuery的done()方法是一種在異步JavaScript編程中用于處理Promise對象結(jié)果的方法。Promise對象是一種在不阻塞主線程的情況下進行異步編程的方式,用于解決回調(diào)函數(shù)嵌套過深和代碼可讀性較差的問題。
//創(chuàng)建Promise對象 var promiseObj = new Promise(function(resolve, reject) { if (document.readyState === "complete") { resolve("頁面已經(jīng)加載完畢!"); } else { reject("頁面尚未加載完畢!"); } }); //通過done()方法處理Promise對象 promiseObj.done(function(msg) { console.log(msg); }).fail(function(errorMsg) { console.log(errorMsg); });
我們可以看到,通過done()方法可以處理Promise對象的成功狀態(tài),也可以通過fail()方法處理Promise對象的失敗狀態(tài)。在上面的例子中,如果頁面加載完畢,則resolve()方法被調(diào)用,輸出“頁面已經(jīng)加載完畢!”;如果頁面尚未加載完畢,則reject()方法被調(diào)用,輸出“頁面尚未加載完畢!”。
除了處理Promise對象的狀態(tài),done()方法也可以用于鏈?zhǔn)秸{(diào)用,使得多個異步操作可以按照特定的順序執(zhí)行,從而避免回調(diào)函數(shù)嵌套過深和代碼可讀性較差的問題。例如:
//創(chuàng)建Promise對象 var promiseObj1 = $.ajax({ url: "data.json", dataType: "json" }); var promiseObj2 = $.ajax({ url: "text.txt", dataType: "text" }); //通過done()方法處理Promise對象 promiseObj1.done(function(data) { console.log(data); }).fail(function() { console.log("獲取數(shù)據(jù)失敗!"); }).always(function() { console.log("操作已完成!"); }); promiseObj2.done(function(text) { console.log(text); }).fail(function() { console.log("獲取文本失敗!"); }).always(function() { console.log("操作已完成!"); });
在上面的例子中,我們采用了兩個ajax()方法來獲取數(shù)據(jù)和文本,并采用done()方法對它們進行處理。可以看到,通過done()方法的鏈?zhǔn)秸{(diào)用,我們可以使得多個異步操作按照特定的順序執(zhí)行,并在每個異步操作執(zhí)行結(jié)束后輸出特定的信息。這樣可以使得異步代碼更加清晰易懂,提高代碼的可讀性。