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技术技巧大全(五)
Jan 22 Javascript
jquery form表单提交插件asp.net后台中文解码
Jun 12 Javascript
js 可拖动列表实现代码
Dec 13 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
Jan 06 Javascript
javascript基于DOM实现省市级联下拉框的方法
May 14 Javascript
使用jQuery在对象中缓存选择器的简单方法
Jun 30 Javascript
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
vue弹窗消息组件的使用方法
Sep 24 Javascript
Vue登录主页动态背景短视频制作
Sep 21 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
Nov 05 Javascript
解决vue-cli输入命令vue ui没效果的问题
Nov 17 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代码
2007/03/03 PHP
PHP中比较时间大小实例
2014/08/21 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
jQuery Clone Bug解决代码
2010/12/22 Javascript
在百度知道团队中快速审批新成员的js脚本
2014/02/02 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
js实现微信聊天界面
2020/08/09 Javascript
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python的requests网络编程包使用教程
2016/07/11 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
24式加速你的Python(小结)
2019/06/13 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
C++面试题目
2013/06/25 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
初级党校心得体会
2014/09/11 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
西安兵马俑导游词
2015/02/02 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
比较几种Redis集群方案
2021/06/21 Redis
JavaScript的function函数详细介绍
2021/11/20 Javascript