Promise是一種用來處理異步操作的機制,可以用于解決回調地獄的問題。它的核心思想是將異步操作封裝成一個Promise對象,通過鏈式調用的方式來處理異步操作的結果。
Promise對象有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。一旦Promise對象的狀態變為fulfilled或rejected,就會調用相應的回調函數。
Promise對象的基本用法如下:
1.創建Promise對象:
const promise = new Promise((resolve, reject) => {
// 異步操作
// 如果操作成功,調用resolve方法并傳入結果
// 如果操作失敗,調用reject方法并傳入錯誤信息
});
2.處理Promise對象的結果:
promise
.then(result => {
// 處理成功的結果
})
.catch(error => {
// 處理失敗的結果
});
3.在Promise對象中可以嵌套其他異步操作:
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success');
}, 1000);
});
promise
.then(result => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result.toUpperCase());
}, 1000);
});
})
.then(result => {
console.log(result); // SUCCESS
})
.catch(error => {
console.error(error);
});
ES7中引入了async/await關鍵字,可以更方便地使用Promise。使用async關鍵字定義一個異步函數,其中可以使用await關鍵字來等待異步操作的結果。
4.async/await的基本用法:
async function getData() {
try {
const result1 = await asyncFunc1();
const result2 = await asyncFunc2(result1);
console.log(result2);
} catch (error) {
console.error(error);
}
}
其中,asyncFunc1和asyncFunc2都是返回Promise對象的異步函數。
通過async/await可以使異步代碼看起來更像同步代碼,提高可讀性。但需要注意的是,await只能在async函數內部使用。