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 相关文章推荐
jquery select(列表)的操作(取值/赋值)
Mar 16 Javascript
前台js改变Session的值(用ajax实现)
Dec 28 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
Javascript 按位与运算符 (&)使用介绍
Feb 04 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
May 24 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
js Dom实现换肤效果
Oct 21 Javascript
JS实现非首屏图片延迟加载的示例
Jan 06 Javascript
vue中子组件传递数据给父组件的讲解
Jan 27 Javascript
详解如何运行vue项目
Apr 15 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实现LOL数据远程获取
2014/06/10 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
js获取日期:昨天今天和明天、后天
2014/06/11 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
React Native 环境搭建的教程
2017/08/19 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
Python登录注册验证功能实现
2018/06/18 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python3实现绘制二维点图
2019/12/04 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
路政管理专业个人自荐信范文
2013/11/30 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
2015年双拥工作总结
2015/04/08 职场文书
2015年基层党建工作总结
2015/05/14 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
新娘婚礼致辞
2015/07/27 职场文书
基于Python编写简易版的天天跑酷游戏的示例代码
2022/03/23 Python
解决MySQL报“too many connections“错误
2022/04/19 MySQL
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers