Promise 是 JavaScript 中异步编程的一种解决方案。它是一个代表异步操作的最终完成或失败的对象。
Promise 有以下主要特点:
- 状态不可逆:一个 Promise 对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。pending -> fulfilled 或 pending -> rejected。一旦状态改变,就不能再变回来了。
- 拥有最终的值:fulfilled 状态的 Promise 对象携带一个值,rejected 状态的 Promise 对象携带一个原因。
- 可以串行:一个 Promise 对象在状态变化后,会触发它后续的 Promise 对象。
- 支持链式调用:then 方法返回一个 Promise,所以它可以链式调用。
使用 Promise 主要有以下几步:
- 创建 Promise 对象:使用 new Promise 初始化,它接受一个 executor 函数,里面有 resolve 和 reject 两个函数。
let promise = new Promise((resolve, reject) => {
// ...
});
- then 方法:包含一个成功的回调 onFulfilled 和一个失败的回调 onRejected,返回一个新的 Promise 实例。
promise.then(onFulfilled, onRejected);
- catch 方法:catch 是 .then(null, onRejected) 的别名,用于指定发生错误时的回调函数。
promise.catch(onRejected);
- resolve 函数:将 Promise 状态改为 fulfilled,并将值传递给相应的回调函数。
resolve(value);
- 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 中重要的异步解决方案,它有以下主要特征:
- 三种状态:pending、fulfilled、rejected
- 状态不可逆
- 拥有最终结果
- 支持链式调用