Promise 是 JavaScript 中实现异步编程的一种重要方式。
Promise 的特点包括:
-
解决回调地狱问题
Promise 通过 then 链式调用,避免多层回调函数嵌套。
2.支持异步操作
Promise 可以表示一个异步操作的最终完成或失败,并在完成后执行回调函数。
3.只执行一次
每个 Promise 对象只能触发一次完成或失败,then 和 catch 只会调用一次。
4.支持链式调用
then 和 catch 返回新的 Promise,可以链式调用下一个操作。
5.状态不可变
一旦状态发生改变,Promise 对象就不会再改变状态。
我用通俗的语言再解释一下Promise:
通俗理解
Promise就像是定一个餐在餐厅。
- 你先去柜台定餐(new Promise),然后给服务员下单(异步任务)。
- 这个时候餐没好,你只能去旁边先等着(异步操作)。
- 等到餐做好了(resolve),服务员会叫你的号,你可以去取餐。
- 如果餐做失败了(reject),服务员也会告诉你,你只能换一个餐或取消。
- 如果你叫了两个号(then链式调用),也就是点了两个餐,第一个餐好了,你就可以先去取。等到第二个餐好了,你再过去取第二个餐。
- 每个餐(Promise)只能完成或者失败一次,不能中途改变。一但状态确定就不会再改变了。
Promise的意思就是一个承诺,我承诺给你一个结果,但是需要异步完成,中间有可能成功(resolve)也有可能失败(reject),但绝不会两者同时发生。
链式调用就像订餐的号码,确保异步任务执行的顺序。
以上就是我对Promise的通俗解释,希望这个比喻让你更容易理解Promise。
Promise的用法
const promise = new Promise((resolve, reject) => {
// 异步操作
if(成功) {
resolve(value); // 变为 fulfilled
} else {
reject(error); // 变为 rejected
}
});
promise.then(value => {
// fulfilled 状态执行
}).catch(error => {
// rejected 状态执行
})