// 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);
}
}
});
}

最新文章

  1. 0-Spark高级数据分析-读书笔记
  2. 用Ant来做一键部署
  3. U3D--常用属性(不完整,待加)
  4. 修改远程桌面端口号.bat
  5. Xcode5创建自己的静态库详解
  6. DB天气app冲刺二阶段第十天
  7. c#用反射原理递归遍历复杂实体对象
  8. 好用的自适应表格插件-bootstrap table (支持固定表头)
  9. node.Js学习-- 创建服务器简要步骤
  10. iOS常见内存泄漏解决
  11. C奇淫技巧,——宏神奇
  12. Android_WebServices_介绍
  13. [HMLY]13.请谨慎使用 @weakify 和 @strongify
  14. NYOJ--714--Card Trick
  15. alert 执行顺序问题
  16. postgresql 日志报错could not write to log file: No space left on device,could not write lock file &quot;postmaster.pid&quot;: No space left on device
  17. Linux中ftp的常用命令
  18. http动词解释及规范
  19. mysql和redis的区别
  20. spring mvc中获取请求URL

热门文章

  1. (转)SSL工作原理
  2. tjuthesis 图标题左对齐修改办法
  3. django中自定义404错误页面
  4. mysql_存储引擎层-innodb buffer pool
  5. 010-Spring Boot 扩展分析-ApplicationContextInitializer、CommandLineRunner、ApplicationRunner
  6. TestNG 多线程测试
  7. 龙珠MAD-视频列表(收集更新)
  8. 创建DSN
  9. SQLServer中的Merge使用
  10. Ubuntu解决Nvidia驱动缺失导致的HDMI无法输出问题