Skip to Content
路漫漫其修远兮,吾将上下而求索
ContentPracticeJS 练习题

手写Promise.all

Promise._all = function (promises) { // 该方法返回一个promise对象 return new Promise((resolve, reject) => { // 该方法的参数需为一个可迭代对象 if (promises == null || typeof promises[Symbol.iterator] !== "function") { throw new TypeError(`${promises} is not a iterable`); } promises = [...promises]; // 可迭代对象为空则返回已resolve的promise if (promises.length === 0) { resolve([]); } let count = 0; const values = []; promises.forEach((promise, index) => { // 保证可迭代对象的元素为promise,使用Promise.resolve()处理 Promise.resolve(promise) .then((res) => { values[index] = res; if (++count === promises.length) resolve(values); }) .catch(reject); }); }); };
Promise.myAll = function (proms) { let res, rej const p = new Promise((resolve, reject) => { res = resolve() rej = reject() }) let i = 0 let fulfilled = 0 const result = [] for (const prom of proms) { const index = i i++ Promise.resolve(prom).then((data) => { // 完成的数据汇总到最终结果 result[index] = data; //判断是否全部完成 fulfilled++ if (fulfilled === i) { res(result) } }, rej) } if (i === 0) { res([]) } return p } Promise.myAll([]).then((res) => { console.log(res); })

github地址:s

https://github.com/lydiahallie/javascript-questions/blob/master/zh-CN/README-zh_CN.md 

Last updated on