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
- 链接: /article/promise
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。