返回

不满足于别人给你讲,今天我们自己动手,手写一个promise

见解分享

前言:拥抱异步,携手Promise

在纷繁复杂的现代网络世界,异步编程早已成为不可或缺的一部分。它可以帮助我们处理繁重任务,同时保持界面的流畅响应。作为异步编程的利器,Promise脱颖而出,成为开发者们心中的宠儿。

一、构建Promise:从零开始,打造异步利器

  1. Promise的本质:等待中的承诺

Promise,顾名思义,是一种承诺,它代表了某个异步操作的最终结果。创建Promise时,我们需要传入一个executor函数,该函数有两个参数:resolve和reject。resolve用于将Promise的状态从pending变为fulfilled,而reject则用于将状态从pending变为rejected。

  1. then:连接希望,编织异步流程

then方法是我们与Promise交互的主要途径。它接受两个函数作为参数:onFulfilled和onRejected。当Promise的状态变为fulfilled时,onFulfilled会被调用,而当状态变为rejected时,onRejected会被调用。

  1. catch:捕捉失败,拥抱错误

catch方法是then方法的简化版,它只接受一个函数作为参数,该函数将在Promise状态变为rejected时被调用。

  1. finally:无论成败,始终执行

finally方法与then和catch不同,它无论Promise的状态如何,都会被调用。它通常用于执行一些清理工作,例如关闭资源或显示加载指示器。

二、应用Promise:实战演练,解锁异步编程新境界

  1. 延时操作:让等待变得优雅
const promise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('任务完成!');
  }, 2000);
});

promise.then((result) => {
  console.log(result); // 输出:'任务完成!'
});
  1. 网络请求:从服务器获取数据
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); // 输出:请求失败时的错误信息
});
  1. 多个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中异步编程的利器,可以帮助我们轻松处理各种异步操作,让代码更加优雅和易于维护。