渐进式解析: Handwritten Promise 实现指南
2023-12-17 16:33:23
Promise 的基础
Promise 是 JavaScript 中一个强大的工具,可以帮助我们处理异步操作。它是一种对象,表示一个异步操作的最终完成或失败的结果。Promise 有三种状态:
- 等待(Pending):表示操作正在进行中。
- 已完成(Fulfilled):表示操作已成功完成。
- 已拒绝(Rejected):表示操作已失败。
创建 Promise
我们可以使用 new Promise()
函数来创建一个 Promise 对象。该函数接受一个 executor 函数作为参数,executor 函数有两个参数:resolve
和 reject
。resolve
函数用于将 Promise 的状态从 Pending
更改为 Fulfilled
,而 reject
函数用于将 Promise 的状态从 Pending
更改为 Rejected
。
const promise = new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
// 操作成功
resolve('操作成功');
}, 1000);
});
使用 Promise
我们可以使用 .then()
方法来处理 Promise 的结果。.then()
方法接受两个函数作为参数:onFulfilled
和 onRejected
。onFulfilled
函数用于处理 Promise 成功完成的结果,而 onRejected
函数用于处理 Promise 失败的结果。
promise.then(
(result) => {
// 处理操作成功的结果
console.log(result);
},
(error) => {
// 处理操作失败的结果
console.error(error);
}
);
Promise 链式调用
Promise 的一个强大特性是链式调用。我们可以通过 .then()
方法将多个 Promise 连接起来,形成一个链条。当一个 Promise 完成时,它会触发下一个 Promise 的执行。
promise
.then((result) => {
// 处理操作成功的结果
console.log(result);
return '新的 Promise';
})
.then((result) => {
// 处理第二个 Promise 的结果
console.log(result);
})
.catch((error) => {
// 处理操作失败的结果
console.error(error);
});
Promise.all() 和 Promise.race()
Promise.all()
函数可以将多个 Promise 包装成一个新的 Promise。当所有传入的 Promise 都完成时,新的 Promise 才会完成。Promise.race()
函数也可以将多个 Promise 包装成一个新的 Promise。但是,当第一个传入的 Promise 完成时,新的 Promise 就会完成。
const promises = [
promise1,
promise2,
promise3
];
Promise.all(promises)
.then((results) => {
// 处理所有 Promise 完成的结果
console.log(results);
})
.catch((error) => {
// 处理操作失败的结果
console.error(error);
});
Promise.race(promises)
.then((result) => {
// 处理第一个 Promise 完成的结果
console.log(result);
})
.catch((error) => {
// 处理操作失败的结果
console.error(error);
});
总结
Promise 是 JavaScript 中一个非常强大的工具,可以帮助我们处理异步操作。它可以使我们的代码更优雅、更易读、更易维护。如果您还没有使用过 Promise,我强烈建议您学习一下。相信您一定会爱上它。