在ES6中,Promise對象是用于處理異步操作的一種機制。它代表了一個異步操作的最終完成(或失?。┘捌浣Y果值。Promise對象有三種狀態:pending(等待中)、fulfilled(已成功)和rejected(已失?。?/strong>。理解這些狀態對于正確使用Promise至關重要。
Promise對象的初始狀態是pending。在這個狀態下,Promise表示異步操作尚未完成,仍在進行中。此時,Promise既沒有被resolve(解決),也沒有被reject(拒絕)。
const promise = new Promise((resolve, reject) => {
// 異步操作
setTimeout(() => {
resolve('操作成功');
}, 1000);
});
console.log(promise); // Promise { <pending> }
在上面的例子中,promise對象在創建時處于pending狀態,直到setTimeout回調函數執行并調用resolve方法。
當Promise對象的異步操作成功完成時,它會從pending狀態轉變為fulfilled狀態。此時,Promise對象會調用resolve方法,并將結果值傳遞給then方法的回調函數。
promise.then((result) => {
console.log(result); // 操作成功
console.log(promise); // Promise { '操作成功' }
});
在這個例子中,當setTimeout回調函數執行并調用resolve('操作成功')時,promise對象的狀態變為fulfilled,并且then方法的回調函數被調用,輸出操作成功。
如果Promise對象的異步操作失敗或出現錯誤,它會從pending狀態轉變為rejected狀態。此時,Promise對象會調用reject方法,并將錯誤信息傳遞給catch方法的回調函數。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('操作失敗'));
}, 1000);
});
promise.catch((error) => {
console.log(error.message); // 操作失敗
console.log(promise); // Promise { <rejected> Error: 操作失敗 }
});
在這個例子中,當setTimeout回調函數執行并調用reject(new Error('操作失敗'))時,promise對象的狀態變為rejected,并且catch方法的回調函數被調用,輸出操作失敗。
Promise對象的狀態一旦從pending轉變為fulfilled或rejected,就不可再改變。這意味著一個Promise對象只能被resolve或reject一次,之后的狀態將保持不變。
const promise = new Promise((resolve, reject) => {
resolve('第一次解決');
reject(new Error('第二次拒絕')); // 這行代碼不會生效
});
promise.then((result) => {
console.log(result); // 第一次解決
}).catch((error) => {
console.log(error.message); // 不會執行
});
在這個例子中,盡管在Promise構造函數中調用了reject,但由于resolve已經被調用,Promise對象的狀態已經變為fulfilled,因此reject不會生效。
Promise對象的狀態是理解和使用Promise的關鍵。Promise有三種狀態:pending、fulfilled和rejected。pending是初始狀態,表示異步操作尚未完成;fulfilled表示操作成功完成;rejected表示操作失敗。Promise對象的狀態一旦改變,就不可逆轉。通過正確處理這些狀態,可以有效地管理異步操作,并編寫出更加健壯和可維護的代碼。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。