返回
不满足于别人给你讲,今天我们自己动手,手写一个promise
见解分享
2024-01-12 00:22:55
前言:拥抱异步,携手Promise
在纷繁复杂的现代网络世界,异步编程早已成为不可或缺的一部分。它可以帮助我们处理繁重任务,同时保持界面的流畅响应。作为异步编程的利器,Promise脱颖而出,成为开发者们心中的宠儿。
一、构建Promise:从零开始,打造异步利器
- Promise的本质:等待中的承诺
Promise,顾名思义,是一种承诺,它代表了某个异步操作的最终结果。创建Promise时,我们需要传入一个executor函数,该函数有两个参数:resolve和reject。resolve用于将Promise的状态从pending变为fulfilled,而reject则用于将状态从pending变为rejected。
- then:连接希望,编织异步流程
then方法是我们与Promise交互的主要途径。它接受两个函数作为参数:onFulfilled和onRejected。当Promise的状态变为fulfilled时,onFulfilled会被调用,而当状态变为rejected时,onRejected会被调用。
- catch:捕捉失败,拥抱错误
catch方法是then方法的简化版,它只接受一个函数作为参数,该函数将在Promise状态变为rejected时被调用。
- finally:无论成败,始终执行
finally方法与then和catch不同,它无论Promise的状态如何,都会被调用。它通常用于执行一些清理工作,例如关闭资源或显示加载指示器。
二、应用Promise:实战演练,解锁异步编程新境界
- 延时操作:让等待变得优雅
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务完成!');
}, 2000);
});
promise.then((result) => {
console.log(result); // 输出:'任务完成!'
});
- 网络请求:从服务器获取数据
const promise = fetch('https://example.com/api/data');
promise.then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error('请求失败!');
}
})
.then((data) => {
console.log(data); // 输出:服务器返回的数据
})
.catch((error) => {
console.error(error); // 输出:请求失败时的错误信息
});
- 多个Promise:巧用Promise.all,并行执行异步任务
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务1完成!');
}, 2000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务2完成!');
}, 3000);
});
Promise.all([promise1, promise2]).then((results) => {
console.log(results); // 输出:['任务1完成!', '任务2完成!']
});
结语:掌握Promise,征服异步编程世界
通过今天的学习,我们了解了Promise的基本原理和使用方式。Promise作为JavaScript中异步编程的利器,可以帮助我们轻松处理各种异步操作,让代码更加优雅和易于维护。