手撕promise.all以及promise.race
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相关推荐
- 手写Promise和all、race等方法,附上原理解析
手写一个迷你版的Promise JavaScript 中的 Promise 诞生于 ES2015(ES6),是当下前端开发中特别流行的一种异步操作解决方案,简单实现一个迷你版本帮助深入理解 Promi ...
- 手撕Promise源码
日拱一卒终有尽, 功不唐捐终入海 一.Promise 类核心逻辑实现 思路: Promise 就是一个类 => 需要有一个立即执行的回调 => 传递两个参数resolve和reject(函 ...
- 手写一款符合Promise/A+规范的Promise
手写一款符合Promise/A+规范的Promise 长篇预警!有点长,可以选择性观看.如果对Promise源码不是很清楚,还是推荐从头看,相信你认真从头看到尾,并且去实际操作了,肯定会有收获的.主要 ...
- Promise:Promise.all、Promise.race、Promise.any的用法及区别
在项目开发过程中经常需要通过异步编程来实现功能,此时就需要我们了解Promise. Promise Promise 是异步编程的一种解决方案,比传统的解决方案回调函数和事件更合理和更强大. 有了Pro ...
- Promise.all、Promise.allSettled、Promise.any、Promise.race
Promise的实例方法拓展 Promise.all() :方法用于将多个 Promise 实例,包装成一个新的 Promise 实例. Promise.allSettled():用来确定一组异步操作 ...
- 理解promise、promise.all、promise.race
文章目录 promise promise.all promise.race 注意 总结 promise Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息. Promise 对象有以 ...
- 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()方法用于将多 ...
- Promise.all()、Promise.allSettled()、Promise.any()、Promise.race()用法与区别
概述 Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值 一个 Promise 必然处于以下几种状态之一: 待定(pending): 初始状态,既没有被兑现,也没有被拒绝. 已兑 ...
- Promise、Promise.all 和Promise.race用法
前段时间的项目中由于大多数是异步请求,所以返回的数据顺序不确定造成了很多数据错误.查了大量的资料总算完成,做个小结. promise基础:resolve,和reject resolve方法:在异步方法 ...
- Promise ,Promise.all 和Promise.race的区别
Promise ,Promise.all 和Promise.race的区别 Promise promise是用来解决异步编程问题的,比传统的回调函数和事件处理方法要更加的合理. promise有三个状 ...
最新文章
- latin1_swedish_ci gbk_chinese_ci
- How to protect video content (Flash Media Server)
- 带有托管代码的InfoPath2007表单模版发布到SharePoint表单库(浏览器方式查看)
- pytorch的nn.CrossEntropyLoss()函数使用方法
- java让日志生成日期文件夹_SpringBoot按日期和文件大小生成日志文件到对应日期文件夹...
- eclipse 导出jar 没有主清单属性的解决方法
- 电脑怎么找到tomcat端口_更换内存条的时候我怎么找到自己电脑配置的详细信息...
- Android 使用gson完成Json转map,json转单个对象,json转数组
- IP 点分十进制表示法
- 车林通购车之家--购车计算器模块--贷款
- 微信公众号访问 ssm框架根目录下MP_verify_xxxxxx.txt的解决方法
- 不懂这些法律问题,你的创业融资很危险
- fatal error C1088
- ORACLE之SQL——排序
- 【R-CNN论文翻译】目标检测经典论文R-CNN最新版本(v5版)全面中文翻译
- AAC(高级音频编码)帧格式及编码介绍
- 【全奖博士】香港大学招收计算机视觉方向博士/博后/研究助理
- 宝塔安装包下载linux版本,宝塔linux面板下载
- 更改NavMenu 导航菜单激活时的背景颜色
- 搞懂事件循环,面试不再害怕console输出问题。(自整)
热门文章
- 使用不同的命令去打包正式,测试,本地vue项目
- Python:绘制动态地图-pyecharts
- 及时备份数据可以保护计算机系统吗,电脑数据的保护和备份
- 网页跳转(APP内/浏览器)
- 520被女朋友三番两次拉黑后,我用 Python 写了个“舔狗”必备神器
- PCI Express学习篇---Power Management(二)
- 拒绝B站邀约,从月薪3k到年薪47W,我的经验值得每一个测试人借鉴
- Chevereto图床搭建 | 利用云服务器搭建免费图床完整教程
- 《终结拖延症》读书笔记,作者威廉·克瑙斯
- echarts地图上的标签为图片_百度地图标记点中添加Echarts图表