// all的原理
Promise.all = function(values){return new Promise((resolve,reject)=>{let results = []; // 结果数组let i = 0;let processData = (value,index)=>{results[index] = value;// 当成功的个数 和 当前的参数个数相等就把结果抛出去if(++i === values.length){resolve(results);}}for(let i = 0 ; i< values.length;i++){let current = values[i]; // 拿到数组中每一项// 判断是不是一个promiseif((typeof current === 'object' &&  current !==null)|| typeof current == 'function'){// 如果是promiseif(typeof current.then == 'function'){// 就调用这个promise的then方法,把结果和索引对应上,如果任何一个失败了返回的proimise就是一个失败的promisecurrent.then(y=>{processData(y,i);},reject)}else{processData(current,i);}}else{processData(current,i);}}});
}

转载于:https://www.cnblogs.com/guangzhou11/p/11322644.html

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实现原理

    Promise.all的使用 1.使用特征 入参是一个数组,可以传基本类型值,也可以传promise对象. 返回结果是一个Promise对象. 入参数组中的每一个都返回成功,才返回成功. 只要有一个执 ...

  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. C++中fstream的使用
  2. 数据中心机房空调系统的这些“套路”你知多少?
  3. JVM内存区域划分及其管理机制
  4. 领导者/追随者(Leader/Followers)模型和半同步/半异步(half-sync/half-async)模型
  5. 获取项目根路径,并在其下创建一个名称为userData 的目录。
  6. 【Python】comtypes模块Windows环境下使用批量转换成PDF文件
  7. SQL转换全角和半角函数
  8. FCKeditor配置和使用(转)
  9. 如何在 Mac 上使用剪贴板?
  10. how to be successful with salesforce
  11. jquery版本共存_多个jQuery版本共存的处理方案
  12. 安卓开发之Intent使用介绍(显式Intent和隐式Intent)
  13. Autowired注解与Resource注解的区别
  14. 中国知音导出mysql_央视社会发展纪录片《从〈中国〉到中国 From Chung Kuo to China》全5集 720P/1080i高清纪录片资源百度云盘下载...
  15. 复合函数求导经典例题_【2017年整理】多元函数求导经典例题.ppt
  16. Jmeter5.x线程组setUp-tearDown和调度器实战
  17. java 识别图片 边框_atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本...
  18. 记录来到结算页面的客户
  19. 【产业互联网周报】外媒:英特尔等公司暂停向俄罗斯发货;阿里云季度营收195亿元;第四范式再次提交上市申请...
  20. python控制步进电机驱动器_树莓派通过GPIO控制步进电机(python)

热门文章

  1. 精确通知,顺序访问——Lock锁比synchronized锁的优势之处
  2. count/distinct/group by的用法总结
  3. 头文件的用法及注意事项
  4. C# 学习笔记(5) 继承
  5. CTFshow 反序列化 web272
  6. CTFshow php特性 web109
  7. Java大数,高精度
  8. 【MPI程序】向量乘法,向量点积(高性能计算)
  9. 用Tensorflow搭建第一个神经网络
  10. 方差分析的MATLAB实现(单因子)