type
status
date
slug
summary
tags
category
icon
password
端午三天小长假,大家节日快乐!笔者最近在复习
Promise及其原理,在此记录一下。有误请指教,大佬勿喷!前置知识
在学习源码之前,我们需要了解
Promise的常见用法和基本知识。我们都是通过new来创建一个Promise实例,并传入一个执行器,该执行器会立即执行。执行器接收两个参数,内部成功就resolve,失败则reject。代码如下:接下来,我们就可以通过
then进行链式调用,catch捕获错误:以上,就是
Promise最常见的用法。当然,还有一些Promise的其他语法,如Promise.all | Promise.finally | Promise.resolve等,在这里就不一一介绍了,有需要的可以去MDN了解。
哦对!Promise有三种状态,分别为等待(pending)、成功(fulfilled)、失败(rejected)。pending可以转化为fulfilled或者rejected,一旦转化,就不可再更改。开始分析
接下来,我们开始分析
promise的原理并实现它!
首先,通过我们了解到的知识,Promise其实就是通过new关键字生成实例的一个类,并接收一个执行器。执行器的参数是用来更改状态的。resolve表示成功,reject表示失败。那我们来开始定义吧!上述代码的大致逻辑是:当调用
new Promise()时,constructor会立即执行传入的函数,resolve函数将状态改为成功,reject函数将状态改为失败,且一旦状态已改变,则不能再更改!
我们接着来分析then方法:我们知道,then方法内部做的事情是判断状态。如果成功,需要调用成功的回调函数,否则调用失败的回调函数。成功回调函数有一个参数,表示成功之后的值,失败回调函数也有一个参数,表示失败的原因。并且,then方法是可以多次链式调用的,后一个then方法的回调函数拿到的值是上一个`then`方法回调函数的返回值。
基于以上,我们来手撕一下then方法!锵锵锵!
then诞生了!只要我们梳理出它的作用,其实也不难。到此,promise基本的作用及方法就写好了!
接下来,我们接着实现几个常用的方法!首先是catch,它的作用很简单,是用于捕获异常的,实现代码如下:我们经常会使用
Promise.resolve()去创建promise对象,实现方法也很简单:我们常用的还有
Promise.all()。该方法是用来解决并发问题的,我们来梳理一下。Promise.all()允许我们通过异步代码的调用顺序,得到异步代码的执行结果;all方法返回值也是promise对象。那么,我们来实现它!当然,还有
Promise.finally()方法!finally方法中的回调函数都会执行,无论成功失败;在finally方法后面可以链式调用then拿到结果。我们来搞定它!到这里,我们已经实现了
Promise的基本原理啦!先恭喜一下自己🎉 文章的最后贴一下完整代码吧~- 作者:Leeson
- 链接:https://looseli.top//article/promise
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。







