Promise.all 的原理
2024-10-21 03:14:28
// all的原理
Promise.all = function(values){
return new Promise((resolve,reject)=>{
let results = []; // 结果数组
let i = 0;
let processData = (value,index)=>{
results[index] = value;
// 当成功的个数 和 当前的参数个数相等就把结果抛出去
if(++i === values.length){
resolve(results);
}
}
for(let i = 0 ; i< values.length;i++){
let current = values[i]; // 拿到数组中每一项
// 判断是不是一个promise
if((typeof current === 'object' && current !==null)|| typeof current == 'function'){
// 如果是promise
if(typeof current.then == 'function'){
// 就调用这个promise的then方法,把结果和索引对应上,如果任何一个失败了返回的proimise就是一个失败的promise
current.then(y=>{
processData(y,i);
},reject)
}else{
processData(current,i);
}
}else{
processData(current,i);
}
}
});
}
最新文章
- 0-Spark高级数据分析-读书笔记
- 用Ant来做一键部署
- U3D--常用属性(不完整,待加)
- 修改远程桌面端口号.bat
- Xcode5创建自己的静态库详解
- DB天气app冲刺二阶段第十天
- c#用反射原理递归遍历复杂实体对象
- 好用的自适应表格插件-bootstrap table (支持固定表头)
- node.Js学习-- 创建服务器简要步骤
- iOS常见内存泄漏解决
- C奇淫技巧,——宏神奇
- Android_WebServices_介绍
- [HMLY]13.请谨慎使用 @weakify 和 @strongify
- NYOJ--714--Card Trick
- alert 执行顺序问题
- postgresql 日志报错could not write to log file: No space left on device,could not write lock file ";postmaster.pid";: No space left on device
- Linux中ftp的常用命令
- http动词解释及规范
- mysql和redis的区别
- spring mvc中获取请求URL