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实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
利用js 进行输入框自动匹配字符的小例子
Jun 29 Javascript
js使用eval解析json实例与注意事项分享
Jan 18 Javascript
JQuery 图片滚动轮播示例代码
Mar 24 Javascript
jQuery中:has选择器用法实例
Dec 30 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
Aug 23 Javascript
jquery实现ajax加载超时提示的方法
Jul 23 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
JavaScript对象原型链原理详解
Feb 05 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
vue自定义组件实现双向绑定
Jan 13 Vue.js
聊聊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数组应该有多大的分析
2009/07/30 PHP
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
JS获取整个页面文档的实现代码
2011/12/15 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
Vue+Element自定义纵向表格表头教程
2020/10/26 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
Python计算一个文件里字数的方法
2015/06/15 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
Linux下多个Python版本安装教程
2018/08/15 Python
想学python 这5本书籍你必看!
2018/12/11 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
python 瀑布线指标编写实例
2020/06/03 Python
Python实现手势识别
2020/10/21 Python
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
广告业务员岗位职责
2015/02/13 职场文书
加班费申请报告
2015/05/15 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
教师个人教学反思
2016/02/23 职场文书
一道JS算法面试题——冒泡、选择排序
2021/04/21 Javascript
Redis中一个String类型引发的惨案
2021/07/25 Redis
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python