JS ES6异步解决方案


Posted in Javascript onApril 29, 2021

最初使用回调函数

​ 由于最初j s官方没有明确的规范,各种第三方库中封装的异步函数中传的回调函数中的参数没有明确的规范, 没有明确各个参数的意义, 不便于使用。

​ 但是node中有明确的规范

​ node中的的回调模式:

1. 所有回调函数必须有两个参数,第一个参数表示错误,第二个参数表示结果

2. 所有回调函数必须作为函数最后的参数

3. 所有回调函数不能作为属性出现

es6 异步处理模型

Es6 出现以后, 官方就提出了异步处理的规范, 提出了一种适用于所有异步场景的处理模型。该模型有:

  • 两个阶段: 未决unsettled, 已决settled。
  • 三个状态: pending挂起状态 , resolved成功, rejected失败
  • 总是从未决阶段推向已决阶段,且已决阶段的状态不再改变

任务已决状态后可能需要后续处理,

  • 针对resolved的后续处理我们称之为thenable
  • 针对rejected的后续处理我们称之为catchable

为该异步模型量身打造的API : promise

如何使用promise

Copy

const task = new Promise((resolve, reject) => {     
    // 任务未决阶段代码  
    // 立即执行  
    console.log("开始100米长跑");  
    setTimeout(() => {  
       if (Math.random() > 0.5) {  
           // 成功: 跑完了  
           // 推向成功  
           resolve("跑完了");  
       } else {  
           // 失败: 腿摔断了  
           // 推向失败  
           reject("腿摔断了");  
       }  
    }, 1000)
});
task.then((result) => {
  console.log(result);
}).catch((error) => {
  console.log(error);
})

1s 后任务推向已决, 后续处理在then 或者 catch中 处理。

注意

pending状态 =》rejected状态 :

Copy

1. 调用reject

2. 代码执行报错

3. 手动抛出错误

后续处理函数一定是异步的,且会放到微队列中,

j s执行栈清空后会先执行微队列中的任务,微队列里任务清空后才会执行宏队列中的任务。

  • 宏任务队列有:setTimeout,setInterval,setImmediately,I/O,UI render
  • 微任务队列有:promise,process.nexttick,Object.observe(已经不用了),Mutation.observe

Async await 是es7新增的promise的语法糖大家也可以了解下,本文只是对promise做了个概述,要掌握的其他细节还有很多

以上就是JS ES6异步解决方案的详细内容,更多关于ES6异步解决方案的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
JS写的数字拼图小游戏代码[学习参考]
Oct 29 Javascript
js tab 选项卡
Apr 26 Javascript
JSQL  一个 web DB 的封装
May 05 Javascript
jquery模拟按下回车实现代码
Sep 20 Javascript
JavaScript设计模式之外观模式介绍
Dec 28 Javascript
javascript显示倒计时控制按钮的简单实现
Jun 07 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
详解各版本React路由的跳转的方法
May 10 Javascript
javascript+Canvas实现画板功能
Jun 23 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 jQuery
聊聊JS ES6中的解构
Apr 29 #Javascript
详解TypeScript中的类型保护
Apr 29 #Javascript
7个你应该知道的JS原生错误类型
Apr 29 #Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
如何使用JavaScript策略模式校验表单
Apr 29 #Javascript
react中props 的使用及进行限制的方法
Apr 28 #Javascript
React Hook用法示例详解(6个常见hook)
You might like
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
php实用代码片段整理
2016/11/12 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
vant 中van-list的用法说明
2020/11/11 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[56:41]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs OG
2018/04/01 DOTA
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
基于python检查矩阵计算结果
2020/05/21 Python
python中的django是做什么的
2020/07/31 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
化学教育专业求职信
2014/07/08 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python