ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

手写promise

2021-10-22 22:03:28  阅读:161  来源: 互联网

标签:resolve 函数 调用 promise reject 手写 方法


Promise 本身是同步

真正的异步是你自己在promise内部写的代码

开始实现promise

大概逻辑

1. 实例化构造函数,构造函数内部调用传入的function,把resolve和reject传给function

2. 紧接着调用then方法,把then方法上的一些函数储存起来:(成功函数,失败函数),最终then返回了一个promise,所以还要存储一个promise实例

  2.1 如果是链式调用then,则全部调用,把需要的函数全部存储起来

3. 接着是你写的异步函数resolve或者reject被调用。promise内部修改状态pending --> fulfilled 表示成功,如果调用reject则状态被修改为 rejected 表示失败,状态是不可逆的,只能改一次,保证resolve和reject函数只被调用一次

4. 之后在resolve和reject函数内部使用异步处理(这里是为了防止resolve/reject 同步调用时 ,处理then方法劳动成果的代码执行在then方法之前,导致拿不到then方法的劳动成果)

5. 处理then方法的成功/失败函数,将resolve/reject的结果传入成功函数,并接收返回值,作为下一个then方法的结果传给promise.resolve,reject函数不接收返回值,直接调用当前then方法的失败函数,把错误抛出去

开始实现

先简单实现promise的这几个方法:

resolve

reject

then

catch

 

 

constructor调用传入的函数,把resolve/reject传进去

 

 

先从then方法入手

 

 

catch方法比较简单

 

 

resolve/reject

标签:resolve,函数,调用,promise,reject,手写,方法
来源: https://www.cnblogs.com/chefweb/p/15440774.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有