promise.all实现

//实现思路
// 1.Promise.all()返回的肯定是一个promise对象所以可以直接写一个return new Promise((resolve,reject)=>{})
// 2.遍历传入的参数,用Promise.resolve()将参数包一层,使其变成一个promise对象。
// 3.关键点是何时决议,也就是resolve出来,在这里做了计数器(count),每个内部promise对象决议后就将计数器加一,并判断加一后的大小是否与传入
// 对象的数量相等,如果相等就调用resolve(),如果任意一个Promise对象失败,则调用reject()方法。
// 4.官方规定promise.all()接受的参数是一个可遍历的参数,所以未必一定是一个数组,所以用Array.form()转换一下。
// 5.使用for...of进行遍历,凡是可遍历的变量应该都是部署了iterator方法,所以用for...of遍历最安全。Promise.all=function (iterator){let count=0; //用于计数,当len等于count就resolvelet len=iterator.lengthlet res=[] //存放结果return new Promise((resolve,reject)=>{for(let i in iterator){Promise.resolve(iterator[i])//先转换为Promise对象.then((data)=>{res[i]=dataif(++count===len){resolve(res)}}).catch(e=>{reject(e)})}})
}
var prom1=Promise.resolve(3)
var prom2=new Promise(function(resolve,reject){setTimeout(resolve,2000,'foo')
})
var prom3=444
Promise.all([prom1,prom2,prom3]).then((res)=>{console.log(res)
})

promise.race实现


Promise.race=function (iterator){return new Promise((resolve,reject)=>{for(let i in iterator){Promise.resolve(iterator[i])//先转换为Promise对象.then((data)=>{resolve(data)}).catch(e=>{reject(e)})}})
}
var prom4=new Promise(function(resolve,reject){setTimeout(resolve,5000,'李建业')
})
var prom5=new Promise(function(resolve,reject){setTimeout(resolve,2000,'优先返回')
})
Promise.race([prom4,prom5]).then((res)=>{console.log(res)
})

手撕promise.all以及promise.race相关推荐

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

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

  2. 手撕Promise源码

    日拱一卒终有尽, 功不唐捐终入海 一.Promise 类核心逻辑实现 思路: Promise 就是一个类 => 需要有一个立即执行的回调 => 传递两个参数resolve和reject(函 ...

  3. 手写一款符合Promise/A+规范的Promise

    手写一款符合Promise/A+规范的Promise 长篇预警!有点长,可以选择性观看.如果对Promise源码不是很清楚,还是推荐从头看,相信你认真从头看到尾,并且去实际操作了,肯定会有收获的.主要 ...

  4. Promise:Promise.all、Promise.race、Promise.any的用法及区别

    在项目开发过程中经常需要通过异步编程来实现功能,此时就需要我们了解Promise. Promise Promise 是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大. 有了Pro ...

  5. Promise.all、Promise.allSettled、Promise.any、Promise.race

    Promise的实例方法拓展 Promise.all() :方法用于将多个 Promise 实例,包装成一个新的 Promise 实例. Promise.allSettled():用来确定一组异步操作 ...

  6. 理解promise、promise.all、promise.race

    文章目录 promise promise.all promise.race 注意 总结 promise Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. Promise 对象有以 ...

  7. Promise.all、Promise.race、Promise.allSettled、Promise.any区别

    目录 1.Promise.all 2.Promise.race 3.Promise.allSettled 4.Promise.any 1.Promise.all Promise.all()方法用于将多 ...

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

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

  9. Promise、Promise.all 和Promise.race用法

    前段时间的项目中由于大多数是异步请求,所以返回的数据顺序不确定造成了很多数据错误.查了大量的资料总算完成,做个小结. promise基础:resolve,和reject resolve方法:在异步方法 ...

  10. Promise ,Promise.all 和Promise.race的区别

    Promise ,Promise.all 和Promise.race的区别 Promise promise是用来解决异步编程问题的,比传统的回调函数和事件处理方法要更加的合理. promise有三个状 ...

最新文章

  1. latin1_swedish_ci gbk_chinese_ci
  2. How to protect video content (Flash Media Server)
  3. 带有托管代码的InfoPath2007表单模版发布到SharePoint表单库(浏览器方式查看)
  4. pytorch的nn.CrossEntropyLoss()函数使用方法
  5. java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
  6. eclipse 导出jar 没有主清单属性的解决方法
  7. 电脑怎么找到tomcat端口_更换内存条的时候我怎么找到自己电脑配置的详细信息...
  8. Android 使用gson完成Json转map,json转单个对象,json转数组
  9. IP 点分十进制表示法
  10. 车林通购车之家--购车计算器模块--贷款
  11. 微信公众号访问 ssm框架根目录下MP_verify_xxxxxx.txt的解决方法
  12. 不懂这些法律问题,你的创业融资很危险
  13. fatal error C1088
  14. ORACLE之SQL——排序
  15. 【R-CNN论文翻译】目标检测经典论文R-CNN最新版本(v5版)全面中文翻译
  16. AAC(高级音频编码)帧格式及编码介绍
  17. 【全奖博士】香港大学招收计算机视觉方向博士/博后/研究助理
  18. 宝塔安装包下载linux版本,宝塔linux面板下载
  19. 更改NavMenu 导航菜单激活时的背景颜色
  20. 搞懂事件循环,面试不再害怕console输出问题。(自整)

热门文章

  1. 使用不同的命令去打包正式,测试,本地vue项目
  2. Python:绘制动态地图-pyecharts
  3. 及时备份数据可以保护计算机系统吗,电脑数据的保护和备份
  4. 网页跳转(APP内/浏览器)
  5. 520被女朋友三番两次拉黑后,我用 Python 写了个“舔狗”必备神器
  6. PCI Express学习篇---Power Management(二)
  7. 拒绝B站邀约,从月薪3k到年薪47W,我的经验值得每一个测试人借鉴
  8. Chevereto图床搭建 | 利用云服务器搭建免费图床完整教程
  9. 《终结拖延症》读书笔记,作者威廉·克瑙斯
  10. echarts地图上的标签为图片_百度地图标记点中添加Echarts图表