📜  js 中的 promise - Javascript (1)

📅  最后修改于: 2023-12-03 15:02:22.709000             🧑  作者: Mango

JS 中的 Promise

简介

Promise 是 Javascript 中一种异步编程的解决方案,它解决了回调地狱的问题,使代码更易读、维护和扩展。

Promise 有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

使用
创建 Promise

Promise 可以通过 Promise 构造函数来创建:

const promise = new Promise((resolve, reject) => {
  // 异步操作
  // 操作成功
  resolve(value);
  // 操作失败
  reject(error);
});

其中,resolve 和 reject 是 Promise 的两个回调函数。resolve 用于操作成功时的回调,reject 用于操作失败时的回调。

Promise 链式调用

Promise 可以通过链式调用来使用:

promise
  .then(onFulfilled)
  .catch(onRejected)
  .finally(onFinally);

其中,then 用于操作成功时的回调,catch 用于操作失败时的回调,finally 则用于不管操作成功或失败都要执行的情况。

静态方法

Promise 中还有一些静态方法:

Promise.resolve

Promise.resolve(value);

Promise.resolve 会返回一个成功(fulfilled)的 Promise 对象,结果为 value。

Promise.reject

Promise.reject(error);

Promise.reject 会返回一个失败(rejected)的 Promise 对象,原因为 error。

实例方法

Promise 实例还有一些方法:

then

promise.then(onFulfilled, onRejected);

then 方法用于注册成功和失败的回调函数,它可以返回新的 Promise 对象,以实现链式调用。

catch

promise.catch(onRejected);

catch 方法用于注册错误回调函数,它本质上是 then 中只注册错误回调函数的语法糖。

finally

promise.finally(onFinally);

finally 方法用于注册不管成功或失败都执行的回调函数。

示例
const promise = new Promise((resolve, reject) => {
  // 异步操作
  const isSuccess = true;
  if (isSuccess) {
    resolve('操作成功');
  } else {
    reject('操作失败');
  }
});

promise
  .then((result) => {
    console.log(result); // 操作成功
    return '新的 Promise 对象';
  })
  .then((result) => {
    console.log(result); // 新的 Promise 对象
    throw new Error('手动抛出错误');
  })
  .catch((error) => {
    console.error(error.message); // 手动抛出错误
  })
  .finally(() => {
    console.log('finally'); // finally
  });
结论

Promise 是解决异步编程的好方法,可以避免回调地狱,使代码更易读、维护和扩展。