Promise
如果异步任务嵌套了多层,会导致回调地狱,如下:
为了解决这个问题,ES6 引入了 Promise 对象。
Promise 有三种状态
- 等待状态:pending 默认你创建出来的 promise 是处于等待状态
- 成功状态:fulfulled 当调用 resolve 时,就可以把 promise 从等待变成成功
- 失败状态:rejected 当调用 reject 时,就可以把 promise 从等待变成失败
Promise 的静态方法
javascript
Promise.reject(); // 作用:创建一个状态为已拒绝(rejected)的Promise对象
Promise.resolve(); // 作用:创建一个状态为已解决(resolved)的Promise对象
Promise.all(); // 作用:如果有一个先失败了,直接得到最先失败promise的结果
Promise.allSettled(); // 作用:获取所有的promise的结果,不管成功还是失败
Promise.any(); // 作用:返回第1个成功的 或者 返回所有都失败了
Promise.race(); // 作用:会等到第一个Promise有结果(无论这个结果是fulfilled还是rejected)ES6 Promise
javascript
function fetchData() {
return new Promise((resolve, reject) => {
// 异步任务
if (/* 成功 */) {
resolve(data);
} else {
reject(error);
}
}
}
async function fetchDataAsync() {
try {
// 成功执行
const data = await fetchData();
console.log(data.message);
} catch (error) {
// 失败执行
console.error('Error:', error.message);
} finally {
// 成功或失败都执行
console.log('Finally block executed');
}
}