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 相关文章推荐
基于node.js的快速开发透明代理
Dec 25 Javascript
js内置对象 学习笔记
Aug 01 Javascript
angularjs的一些优化小技巧
Dec 06 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
Feb 25 Javascript
jQuery.datatables.js插件用法及api实例详解
Oct 28 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 Javascript
JavaScript闭包和回调详解
Aug 09 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
js注册时输入合法性验证方法
Oct 21 Javascript
微信小程序网络请求封装示例
Jul 24 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
在 HTML 页面中使用 React的场景分析
Jan 18 Javascript
聊聊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
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
bootstrap模态框示例代码分享
2017/05/17 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
在vant中使用时间选择器和popup弹出层的操作
2020/11/04 Javascript
python抓取京东小米8手机配置信息
2018/11/13 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Python3实现英文字母转换哥特式字体实例代码
2020/09/01 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
八一演出活动方案
2014/02/03 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
教师自我鉴定范文
2014/03/20 职场文书
2014年采购部工作总结
2014/11/20 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS