Skip to content

Promise

如果异步任务嵌套了多层,会导致回调地狱,如下: image-20240515184131522 为了解决这个问题,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');
    }
}

基于 MIT 许可发布