Promise.all的使用

1、使用特征

  • 入参是一个数组,可以传基本类型值,也可以传promise对象。
  • 返回结果是一个Promise对象。
  • 入参数组中的每一个都返回成功,才返回成功。
  • 只要有一个执行失败,则返回失败。

2、使用案例

Promise.all([1, read2(file1), 3]).then(data => {console.log(data)
},error => {console.log(error)
})

3、适用场景

  • 适合多个异步调用函数,并且多个异步函数的调用的入参和结果都无必然联系,比如多个文件的上传或下载。
  • 多个异步函数的执行只关注成功或失败结果。

Promise.all的实现原理

1、实现代码示例

// 封装 Promise.all方法
Promise.all = function (values) {return new Promise((resolve, reject) => {let result = []; // 存放返回值let counter = 0; // 计数器,用于判断异步完成function processData(key, value) {result[key] = value;// 每成功一次计数器就会加1,直到所有都成功的时候会与values长度一致,则认定为都成功了,所以能避免异步问题if (++counter === values.length) {resolve(result);}}// 遍历 数组中的每一项,判断传入的是否是promisefor (let i = 0; i < values.length; i++) {let current = values[i];// 如果是promise则调用获取data值,然后再处理dataif (isPromise(current)) {current.then(data => {processData(i, data);}, reject);} else {// 如果不是promise,传入的是普通值,则直接返回processData(i, current);}}});
}

2、代码解析

  • Promise.all是挂载到Promise类实例上
  • 返回的是一个Promise
  • 需要遍历入参数组中的每一项,判断传入的是不是promise,如果是promise则执行then方法,然后将then方法中的成功回调的data返回,失败则reject
  • 如果入参数组中有基本数值,则直接返回
  • 通过计数器,来判断函数的执行结果

3、代码GitHub地址
https://github.com/RenZhongrui/javascript-learn/blob/master/004-javascript-promise/promise.js

Promise.all实现原理相关推荐

  1. JS Promise的实现原理

    转载自   JS Promise的实现原理 在前端开发过程中,会经常使用到 Promise 模式,可以使异步代码看起来如同步般清新易读,从而从回调地狱中解脱出来.ES6中 已原生支持 Promise, ...

  2. 详解Promise使用与原理

    详解Promise使用与原理 一:Promise的概念 二:Promise的生命周期 三:如何让创建一个Promise 四:编写Promise结果处理程序 浅的讲差不多了,深的来了 --> .t ...

  3. Promise.race 的原理

    // race的原理 Promise.race = function(values){return new Promise((resolve,reject)=>{for(let i = 0 ; ...

  4. Promise.all 的原理

    // all的原理 Promise.all = function(values){return new Promise((resolve,reject)=>{let results = []; ...

  5. promise then err_Promise 原理解析与实现(遵循Promise/A+规范)

    1什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2对于几种常见异步编程方案 回调函数 事件监听 发布/订阅 ...

  6. promise的优点promise.all(),promise.race(),promise.allSettled()的原理

    Promise也是使用回调函数,只不过是把回调封装在了内部,使用上一直通过 then 方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些.Promise出现之前 ...

  7. promise原理—一步一步实现一个promise

    promise特点 一个promise的当前状态只能是pending.fulfilled和rejected三种之一.状态改变只能是pending到fulfilled或者pending到rejected ...

  8. 一篇文章理解Promise原理

    前提掌握知识: 微任务包括: MutationObserver.Promise.then()或reject().Promise为基础开发的其它技术,比如fetch API.V8的垃圾回收过程.Node ...

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

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

最新文章

  1. py 的 第 38 天
  2. word中package提取器
  3. android 应用程序框架
  4. [导入]WAP网站的网关服务器应用形式
  5. Python从头/尾删除子符串的正确操作
  6. 【JDK源码】java.lang包常用类详解
  7. iPhoneX 序列适配方案
  8. NOIP提高组复赛 知识点整理
  9. MATLAB:如何保存图片到指定文件夹?
  10. 零基础学启发式算法(5)-遗传算法 (Genetic Algorithm)
  11. java list 过滤数据库_jdk8对list的各种处理实例详解,包括去重,排序,过滤,分组,统计...
  12. 来电通java版_Java 程序员常用的 11 款免费 IDE 编辑器
  13. 认识计算机硬件.ppt,认识计算机硬件完整ppt课件
  14. 苹果数据线不能充电_去掉耳机和充电器,以后数据线苹果也不会送了
  15. NC打印模板汇总技巧
  16. Electron无边框模式下禁止双击最大化窗口
  17. oracle+alert删除日志,清除alert log
  18. 数据库版本管理(flyway)
  19. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(1)
  20. java毕业设计视频点播系统Mybatis+系统+数据库+调试部署

热门文章

  1. 【情态动词练习题】mustn‘t 和 don‘t have to
  2. 第三节、AHK热键定义
  3. 垃圾分类网页制作 垃圾分类网页设计作业 HTML CSS垃圾分类网页模板 大学生垃圾分类网站毕业设计 DW垃圾分类网页模板下载 垃圾分类网页成品代码 环保网页作品下载
  4. 那杯社会责任的咖啡千滋百味
  5. R语言贝叶斯方法在生态环境领域中的高阶技术
  6. 使用命令行WScript和vbs创建快捷方式
  7. 操作系统语言包在c盘哪里,风林火山Win10专业版中的语言包占用大量C盘空间如何卸载...
  8. html中限制显示文字个数,【css/js】限制一行和多行文字数量,超出部分用省略号显示...
  9. 用指数形母函数证明一个基本的指数运算公式
  10. 【AD封装】XH2.54mm座子插件贴片(带3D)