/** * 手写promise.all 方法 * 核心方法 */ Promise.all = (promiseArr) => { return new Promise((resolve, reject) => { let len = promiseArr.length; let num = 0; let resultArr = []; promiseArr.forEach((pms, index) => { Promise.resolve(pms).then(result => { num++; resultArr[index] = result; if (num == len) { // 这个位置可以替换成resultArr.length == len 吗? resolve(resultArr); } }).catch(err => { reject(err); }) }); }) } // 示例请求 const pro1 = new Promise((res, rej) => { setTimeout(() => { res('2000'); }, 2000) }) // 示例请求 const pro2 = new Promise((res, rej) => { setTimeout(() => { res('1000'); }, 1000) }) // 示例请求 const pro3 = new Promise((res, rej) => { setTimeout(() => { res('3000'); }, 3000) }) // 调用 Promise.all([pro1, pro2, pro3]).then(res => { console.log(res); })
技术要点:
1. Promise.resolve()方法的使用,无论给Promise.resolve传入什么参数,结果都会已promise形式返回
2. 下面这个为什么不可以替换
resultArr[index] = result; if (num == len) { // 这个位置可以替换成resultArr.length == len 吗? resolve(resultArr); }
答:resultArr[index]时这个index不确定返回的是多少,所以可能为resultArr[6],如果数组中提前设置key值,形成这种[,,,,,result]结果,他的数组长度会提前计算出来
点我咨询
一、用户注册、登陆,视为接受本协议的约束。
二、用户承诺遵守国家的法律法规及部门规章
三、用户承诺遵守“313组件库”的知识产权政策.
四、站内插件用于行业交流、学习。
五、用户侵犯第三人的知识产权,由该用户承担全部法律责任。
313组件库(www.yu313.cn)站内所有涉及插件及代码由会员或站主上传而来,313组件库不拥有会员上传的插件及代码的版权
313组件库作为网络服务提供者,对非法转载,盗版行为的发生不具备充分的监控能力。但是当版权拥有者提出侵权指控并出示充分的版权证明材料时,313组件库负有移除盗版和非法转载作品以及停止继续传播的义务。313组件库在满足前款条件下采取移除等相应措施后不为此向原发布人承担违约责任或其他法律责任,包括不承担因侵权指控不成立而给原发布人带来损害的赔偿责任。
如果版权拥有者发现自己作品被侵权,请及时向313组件库提出权利通知,并将姓名、电话、身份证明、权属证明、具体链接(URL)及详细侵权情况描述发往版权举报专用通道,313组件库在收到相关举报文件后,在3个工作日内移除相关涉嫌侵权的内容
QQ:515184405(周一到周五,9:30-18:00)