在JavaScript中,Promise是用于處理異步操作的對象。它代表了一個異步操作的最終完成(或失?。┘捌浣Y果值。Promise對象有三種狀態,分別是pending(進行中)、fulfilled(已成功)和rejected(已失?。?。理解這些狀態對于正確使用Promise至關重要。
Pending是Promise的初始狀態。當一個Promise被創建時,它處于pending狀態。這意味著異步操作尚未完成,Promise既沒有被fulfilled,也沒有被rejected。
const promise = new Promise((resolve, reject) => {
// 異步操作
setTimeout(() => {
resolve('操作成功');
}, 1000);
});
console.log(promise); // Promise { <pending> }
在上面的例子中,promise在創建后立即處于pending狀態,直到setTimeout回調函數執行并調用resolve。
當Promise中的異步操作成功完成時,Promise會從pending狀態轉變為fulfilled狀態。此時,Promise的結果值會被傳遞給then方法的回調函數。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('操作成功');
}, 1000);
});
promise.then((result) => {
console.log(result); // 操作成功
});
在這個例子中,promise在1秒后變為fulfilled狀態,并且then方法的回調函數被調用,輸出操作成功。
如果Promise中的異步操作失敗或出現錯誤,Promise會從pending狀態轉變為rejected狀態。此時,錯誤信息會被傳遞給catch方法的回調函數。
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('操作失敗'));
}, 1000);
});
promise.catch((error) => {
console.log(error.message); // 操作失敗
});
在這個例子中,promise在1秒后變為rejected狀態,并且catch方法的回調函數被調用,輸出操作失敗。
Promise的狀態一旦從pending轉變為fulfilled或rejected,就不可再改變。這意味著一個Promise只能被resolve或reject一次,后續的resolve或reject調用將被忽略。
const promise = new Promise((resolve, reject) => {
resolve('第一次resolve');
reject(new Error('第一次reject')); // 被忽略
resolve('第二次resolve'); // 被忽略
});
promise.then((result) => {
console.log(result); // 第一次resolve
}).catch((error) => {
console.log(error.message); // 不會執行
});
在這個例子中,盡管reject和第二次resolve被調用,但它們都被忽略,只有第一次resolve生效。
Promise的三種狀態pending、fulfilled和rejected是理解和使用Promise的基礎。pending表示異步操作尚未完成,fulfilled表示操作成功完成,rejected表示操作失敗。Promise的狀態一旦改變,就不可逆轉。掌握這些狀態及其轉換規則,有助于更好地處理異步操作和錯誤處理。
通過合理使用Promise,可以有效地管理復雜的異步代碼,避免回調地獄(Callback Hell),并提高代碼的可讀性和可維護性。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。