共计 721 个字符,预计需要花费 2 分钟才能阅读完成。
Promise.all() 有什么个性
将多个 promise 实例包装成一个新的 promise 实例,胜利返回一个后果数组,失败返回第一个 reject 的值。胜利:传一个数组,外面都是 promise,(也能够不是 promise,也能够是常量)失败:其中一个执行报错,会返回到 catch,其余的 promise 还是会执行,因为他在创立,实例化的时候就执行了。
手写 promise.all()
//promise.all() 仍然返回一个新的 promise | |
function PromiseAll(promiseArray){return new Promise((resolve,reject)=>{if(!Array.isArray(promiseArray)){// 判断是否是数组 | |
return reject(new Error('传入的参数必须是参数')) | |
} | |
const res=[]; | |
let count=0;// 计时器 | |
for(let i=0;i<promiseArray.length;i++){ | |
// 返回的数组不肯定全是 promise,须要进行判断,promise.resolve 会主动将参数包装成一个 promise | |
Promise.resolve(promiseArray[i]).then(value=>{ | |
count++; | |
res[i]=value; | |
//count 的作用 如果间接 push,因为 promise 程序不同,会导致乱序 | |
//js 数组的个性,res[6]='xxx' 则 res.length=7; 因而 res.length 并不精确 | |
if(count===promiseArray.length){resolve(res) | |
} | |
}).catch(e=>{reject(e) | |
}) | |
} | |
}) | |
} |
正文完
发表至: javascript
2021-03-17