Promise:Promise.all、Promise.race、Promise.any的用法及区别
在项目开发过程中经常需要通过异步编程来实现功能,此时就需要我们了解Promise
.
Promise
Promise
是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大。
有了Promise
对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
一个Promise
的当前状态必须为以下三种状态中的一种:等待态(Pending
)、执行态(Fulfilled
)和拒绝态(Rejected
),状态的改变只能是单向的,且变化后不可在改变。
一个Promise
必须提供一个 then
方法以访问其当前值、终值和据因。
promise.then(onFulfilled, onRejected)
回调函数只能执行一次,且返回 promise
对象
Promise
的每个操作返回的都是Promise
对象,可支持链式调用。
通过 then
方法执行回调函数,Promise
的回调函数是放在事件循环中的微队列。
Promise
的具体用法如下:
function fn(){return new Promise((resolve, reject)=>{成功时调用 resolve(数据)失败时调用 reject(错误)})}fn().then(success1, fail1).then(success2, fail2)
Promise.all
Promise.all()
方法用于将多个 Promise
实例,包装成一个新的 Promise
实例。
Promise.all()
全部子实例都成功才算成功,有一个子实例失败就算失败。
Promise.all([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`都成功才会调用`success1
Promise.race
Promise.race()
方法也是将多个 Promise
实例,包装成一个新的 Promise
实例。
Promise.race()
rece是赛跑机制,要看最先的promise子实例是成功还是失败。
Promise.race([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`只要第一个成功就会调用`success1
Promise.any
Promise.any()
方法同样是将多个 Promise
实例,包装成一个新的 Promise
实例。
Promise.any()
有一个子实例成功就算成功,全部子实例失败才算失败。
Promise.race([promise1, promise2]).then(success1, fail1)
promise1`和`promise2`只要有一个成功就会调用`success1
总结:
Promise.all()
方法是&&
的关系;Promise.any()
方法是||
的关系;Promise.race()
方法是赛跑机制
;
Promise:Promise.all、Promise.race、Promise.any的用法及区别相关推荐
- js实现promise.all promise.race promise.resolve
最近在准备面试,关于 promise 是面试的热点和考点.不定面试官心情好了就会让你写个 promise 的 api 废话不多说,下面是我写的代码,如有不严谨之处希望指出. promise.all 当 ...
- Promise.all()、Promise.allSettled()、Promise.any()、Promise.race()用法与区别
概述 Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值 一个 Promise 必然处于以下几种状态之一: 待定(pending): 初始状态,既没有被兑现,也没有被拒绝. 已兑 ...
- 手写Promise和all、race等方法,附上原理解析
手写一个迷你版的Promise JavaScript 中的 Promise 诞生于 ES2015(ES6),是当下前端开发中特别流行的一种异步操作解决方案,简单实现一个迷你版本帮助深入理解 Promi ...
- 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出
1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) {if (success){r ...
- 大白话讲解Promise(二)理解Promise规范
上一篇我们讲解了ES6中Promise的用法,但是知道了用法还远远不够,作为一名专业的前端工程师,还必须通晓原理.所以,为了补全我们关于Promise的知识树,有必要理解Promise/A+规范,理解 ...
- Promise进阶——如何实现一个Promise库
概述 从上次更新Promise/A+规范后,已经很久没有更新博客了.之前由于业务需要,完成了一个TypeScript语言的Promise库.这次我们来和大家一步一步介绍下,我们如何实现一个符合Prom ...
- Promise学习-手写一个promise
学习了Promise的A+规范,以及手写一个Promise后,我对Promise学到的结果. 平常也有用到过promise来处理异步,先回顾下promise的用法 new Promise((resol ...
- 【Promise】自定义 - 手写Promise - Promise.all - Promise(executor)
手写Promise 1. 整体结构框架 2. Promise(executor) 3. Promise.prototype.then 4. Promise.prototype.catch 5. Pro ...
- 深入理解Promise并写一个符合Promise a+规范的Promise代码
深入理解Promise并写一个符合Promise a+规范的Promise代码 关于Promise函数可以参考我写的这篇文章https://www.cnblogs.com/qiaohong/p/770 ...
最新文章
- win10 mbr下装linux,在Win10下安装Ubuntu 18.04双系统(MBR+Legacy)
- 优秀!21岁读博,26岁博士毕业即为副教授,同年又晋升教授和博导!
- springboot自定义jar通过enable配置是否开启
- 2017.6.11 校内模拟赛
- python和c有什么区别_c 跟 python的区别有哪些
- SQL语言基础:触发器相关知识介绍​
- 音频编码解码器库 libZPlay
- 安装uwsgi报错:error linking uWSGI解决方法
- 基于虚拟帐号的邮件系统extmail(1)
- 洛谷 P4568 [JLOI2011]飞行路线
- 《证券基金经营机构信息技术管理办法》要点简读
- C++中的const完全解析
- (三)【机器人路径规划】Astar算法
- 带你理解 Hanoi 汉诺塔递归算法
- tibco常用命令记录
- Python 并发编程
- haproxy path_beg,path_end ,hdr_beg
- 小扎不要「脸」了?Facebook正式改名Meta!买它,满仓元宇宙
- 统计学 分布篇 - Binomial Distribution(二项分布)
- 说说WinCE的WS_EX_TOPMOST和窗口置顶显示