在项目开发过程中经常需要通过异步编程来实现功能,此时就需要我们了解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的用法及区别相关推荐

  1. js实现promise.all promise.race promise.resolve

    最近在准备面试,关于 promise 是面试的热点和考点.不定面试官心情好了就会让你写个 promise 的 api 废话不多说,下面是我写的代码,如有不严谨之处希望指出. promise.all 当 ...

  2. Promise.all()、Promise.allSettled()、Promise.any()、Promise.race()用法与区别

    概述 Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值 一个 Promise 必然处于以下几种状态之一: 待定(pending): 初始状态,既没有被兑现,也没有被拒绝. 已兑 ...

  3. 手写Promise和all、race等方法,附上原理解析

    手写一个迷你版的Promise JavaScript 中的 Promise 诞生于 ES2015(ES6),是当下前端开发中特别流行的一种异步操作解决方案,简单实现一个迷你版本帮助深入理解 Promi ...

  4. 关于ES6中Promise的应用-顺序合并Promise,并将返回结果以数组的形式输出

    1.Promise 基础知识梳理 创建一个Promise实例 const promise = new Promise(function(resolve, reject) {if (success){r ...

  5. 大白话讲解Promise(二)理解Promise规范

    上一篇我们讲解了ES6中Promise的用法,但是知道了用法还远远不够,作为一名专业的前端工程师,还必须通晓原理.所以,为了补全我们关于Promise的知识树,有必要理解Promise/A+规范,理解 ...

  6. Promise进阶——如何实现一个Promise库

    概述 从上次更新Promise/A+规范后,已经很久没有更新博客了.之前由于业务需要,完成了一个TypeScript语言的Promise库.这次我们来和大家一步一步介绍下,我们如何实现一个符合Prom ...

  7. Promise学习-手写一个promise

    学习了Promise的A+规范,以及手写一个Promise后,我对Promise学到的结果. 平常也有用到过promise来处理异步,先回顾下promise的用法 new Promise((resol ...

  8. 【Promise】自定义 - 手写Promise - Promise.all - Promise(executor)

    手写Promise 1. 整体结构框架 2. Promise(executor) 3. Promise.prototype.then 4. Promise.prototype.catch 5. Pro ...

  9. 深入理解Promise并写一个符合Promise a+规范的Promise代码

    深入理解Promise并写一个符合Promise a+规范的Promise代码 关于Promise函数可以参考我写的这篇文章https://www.cnblogs.com/qiaohong/p/770 ...

最新文章

  1. win10 mbr下装linux,在Win10下安装Ubuntu 18.04双系统(MBR+Legacy)
  2. 优秀!21岁读博,26岁博士毕业即为副教授,同年又晋升教授和博导!
  3. springboot自定义jar通过enable配置是否开启
  4. 2017.6.11 校内模拟赛
  5. python和c有什么区别_c 跟 python的区别有哪些
  6. SQL语言基础:触发器相关知识介绍​
  7. 音频编码解码器库 libZPlay
  8. 安装uwsgi报错:error linking uWSGI解决方法
  9. 基于虚拟帐号的邮件系统extmail(1)
  10. 洛谷 P4568 [JLOI2011]飞行路线
  11. 《证券基金经营机构信息技术管理办法》要点简读
  12. C++中的const完全解析
  13. (三)【机器人路径规划】Astar算法
  14. 带你理解 Hanoi 汉诺塔递归算法
  15. tibco常用命令记录
  16. Python 并发编程
  17. haproxy path_beg,path_end ,hdr_beg
  18. 小扎不要「脸」了?Facebook正式改名Meta!买它,满仓元宇宙
  19. 统计学 分布篇 - Binomial Distribution(二项分布)
  20. 说说WinCE的WS_EX_TOPMOST和窗口置顶显示

热门文章

  1. GCC/G++选项 -Wl,-Bstatic和-Wl,-Bdynamic
  2. 使用Bootstrap制作导航栏
  3. 虚拟化容器Docker的安全性讨论
  4. 创建型模式 工厂模式
  5. 浅谈JavaScript继承
  6. 《Hadoop MapReduce实战手册》一1.4 给WordCount MapReduce程序增加combiner步骤
  7. 我的2015羊年总结
  8. TC SRM601
  9. Excel中 提取字符串中的字符或数字
  10. PHP 与Memcache 分布式