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 相关文章推荐
JavaScript 乱码问题
Aug 06 Javascript
js实现固定显示区域内自动缩放图片的方法
Jul 18 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
JS+CSS实现电子商务网站导航模板效果代码
Sep 10 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
Node.js和Express简单入门介绍
Mar 24 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
vue和webpack安装命令详解
Jun 15 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
javascript实现超好看的3D烟花特效
Jan 01 Javascript
详细分析React 表单与事件
Jul 08 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
php 读取文件乱码问题
2010/02/20 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
pygame学习笔记(5):游戏精灵
2015/04/15 Python
浅谈flask源码之请求过程
2018/07/26 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
python实现在线翻译
2020/06/18 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
经典c++面试题六
2012/01/18 面试题
测试工程师岗位职责
2013/11/28 职场文书
竞职演讲稿范文
2014/01/11 职场文书
工程材料采购方案
2014/05/18 职场文书
甜品店创业计划书
2014/09/21 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
小学生思想品德评语
2014/12/31 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题