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 var变量隐式声明方法
Oct 19 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
节点的插入之append()和appendTo()的用法介绍
Jan 13 Javascript
容易造成JavaScript内存泄露几个方面
Sep 04 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
Oct 21 Javascript
纯javascript实现图片延时加载方法
Aug 21 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
May 17 Javascript
noty ? jQuery通知插件全面解析
May 18 Javascript
微信端开发--登录小程序步骤
Jan 11 Javascript
详解vue 中使用 AJAX获取数据的方法
Jan 18 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 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数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
ASP.NET中AJAX 调用实例代码
2012/05/03 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
JS验证码实现代码
2017/09/14 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
jQuery AJAX应用实例总结
2020/05/19 jQuery
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
Python实现豆瓣图片下载的方法
2015/05/25 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
禁止酒驾标语
2014/06/25 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript