当前位置: 首页 > news >正文

Promise的实现原理

  • 作用:异步问题同步化解决方案,解决回调地狱、链式操作
  • 原理:
    • 状态:pending、fufilled reject
    • 构造函数传入一个函数,resolve进入then,reject进入catch
    • 静态方法:resolve reject all any react
new Promise((resolve, reject) => {})
.catch(e => e)
.then(res => {}).finally()// 全部满足走then,err是最前的一个reject
Promise.all([p1(), p2,() p3()])
.then(([r1, r2, r3]) => {})
.catch(err => {})// 全部不满足走catch,value是最前的一个resovle, err是一段文本全部错误
Promise.any([p1(), p2,() p3()])
.then(value => {})
.catch(err => {})// p1、p2、p3谁的计算速度最快(慢的那些不管)  最快的resolve走then,reject走catch
Promise.race([p1(), p2,() p3()])
.then(value => {})
.catch(err => {})	  
  • 缺点:一旦执行将无法终止;处于pending状态,无法得知目前进展哪个阶段

  • Primise本身就是同步,只是then或catch触发异步操作

  • Generator:

    • 是一个可以暂停和继续执行的函数;
    • 包含两部分:函数名前加 *;函数内用yield关键字返回值
  • async await

    • 遵循Generator函数的语法糖,async对应* await对应yield
    • async是加载函数钱的修饰符,声明一个异步函数,返回一个Promise对象
    • await也是一个修饰符,只能放在async定义的函数内,可理解为等待的意思,await紧跟任意表达式
    • 缺点:过多使用await会造成同步阻塞
  • 区别:

    • 都是为了解决异步流程的问题,promise是约定,而async更优雅更美观
    • async基于promise实现,不需要处理resolve值。还避免嵌套代码
    • async让try catch可以处理同步和异步错误
http://www.lryc.cn/news/13626.html

相关文章:

  • 【MFC】数据库操作——ODBC(20)
  • 旺店通与金蝶云星空对接集成采购入库单接口
  • Linux基础-学会使用命令帮助
  • MyBatis 之四(动态SQL之 if、trim、where、set、foreach 标签)
  • PAT (Advanced Level) Practice 1006 Sign In and Sign Out
  • Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView
  • Windows PowerShell中成功进入conda虚拟环境
  • 【C++】类与对象理解和学习(中)
  • 每日英语学习(11)大英复习单词和翻译
  • x79主板M.2无法识别固态硬盘
  • 配置Tomcat性能优化
  • Hive3 安装方式详解,datagrid自定义驱动连接hive
  • 约束优化:约束优化的三种序列无约束优化方法(罚函数法)
  • 你真的会做APP UI自动化测试吗?我敢打赌百分之九十的人都不知道这个思路
  • GIT:【基础三】Git工作核心原理
  • 【1.12 golang中的指针】
  • 十五.程序环境和预处理
  • 高并发系统设计之负载均衡
  • 嵌入式Linux从入门到精通之第十四节:Linux IO控制技术
  • /etc/fstab文件
  • 深度学习神经网络基础知识(一) 模型选择、欠拟合和过拟合
  • 同样做软件测试,为什么有人月入3k-5k,有人能拿到17-20k?
  • 如何运行YOLOv5的代码,实现目标识别
  • 【正点原子FPGA连载】第十四章SD卡读写TXT文本实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 【人工智能AI :Open AI】我想写一本书,书名是《中国文学史》,帮我列一下目录,细化到三级目录,不少于2000字。
  • 「文档数据库之争」MongoDB和CouchDB的比较
  • c++11 标准模板(STL)(std::unordered_set)(三)
  • 事件循环机制eventLoop?Js事件流?JavaScript如何实现异步编程?
  • 视频播放器倍速、清晰度切换、m3u8下载
  • 将Nginx 核心知识点扒了个底朝天(五)