Javascript中的Promise是什么?它有哪些特点?如何使用?

Promise 是 JavaScript 中异步编程的一种解决方案。它是一个代表异步操作的最终完成或失败的对象。

Promise 有以下主要特点:

  1. 状态不可逆:一个 Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。pending -> fulfilled 或 pending -> rejected。一旦状态改变,就不能再变回来了。
  2. 拥有最终的值:fulfilled 状态的 Promise 对象携带一个值,rejected 状态的 Promise 对象携带一个原因。
  3. 可以串行:一个 Promise 对象在状态变化后,会触发它后续的 Promise 对象。
  4. 支持链式调用:then 方法返回一个 Promise,所以它可以链式调用。

使用 Promise 主要有以下几步:

  1. 创建 Promise 对象:使用 new Promise 初始化,它接受一个 executor 函数,里面有 resolve 和 reject 两个函数。
let promise = new Promise((resolve, reject) => {
  // ...
});
  1. then 方法:包含一个成功的回调 onFulfilled 和一个失败的回调 onRejected,返回一个新的 Promise 实例。
promise.then(onFulfilled, onRejected); 
  1. catch 方法:catch 是 .then(null, onRejected) 的别名,用于指定发生错误时的回调函数。
promise.catch(onRejected);  
  1. resolve 函数:将 Promise 状态改为 fulfilled,并将值传递给相应的回调函数。
resolve(value); 
  1. reject 函数:将 Promise 状态改为 rejected,并将原因传递给相应的回调函数。
reject(reason);  

例如:

let promise = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'Success!');
});

promise.then(value => {
  console.log(value); // Success!  
});

promise.catch(err => {
  console.log(err);
});

这里我们创建了一个 Promise,1 秒后调用 resolve 将状态改为 fulfilled,then 方法中的回调函数就会执行,输出 Success!。

所以总结来说,Promise 是 JavaScript 中重要的异步解决方案,它有以下主要特征:

  1. 三种状态:pending、fulfilled、rejected
  2. 状态不可逆
  3. 拥有最终结果
  4. 支持链式调用