语法

Promise.all(iterable);

参数

iterable

一个可迭代对象,如 Array 或 String。

返回值

  • 如果传入的参数是一个空的可迭代对象,则返回一个已完成(already resolved)状态的 Promise。
  • 如果传入的参数不包含任何 promise,则返回一个异步完成(asynchronously resolved) Promise。注意:Google Chrome 58 在这种情况下返回一个已完成(already resolved)状态的 Promise。
  • 其它情况下返回一个处理中(pending)的Promise。这个返回的 promise 之后会在所有的 promise 都完成或有一个 promise 失败时异步地变为完成或失败。 见下方关于“Promise.all 的异步或同步”示例。返回值将会按照参数内的 promise 顺序排列,而不是由调用 promise 的完成顺序决定。

1) 核心思路

  1. 接收一个 Promise 实例的数组或具有 Iterator 接口的对象作为参数
  2. 这个方法返回一个新的 promise 对象,
  3. 遍历传入的参数,用Promise.resolve()将参数"包一层",使其变成一个promise对象
  4. 参数所有回调成功才是成功,返回值数组与参数顺序一致
    let all1=function(arr){let index=0,result=[]return new Promise((resolve,reject)=>{arr.forEach((p,i)=>{//普通值返回成功状态,promise直接返回(不改变成功或者失败状态)Promise.resolve(p).then(//成功val=>{index++result[i]=valif(index===arr.length){//返回全部成功的数组resolve(result)}},err=>{//失败reject(err)})})})
    }
    let p1 = new Promise(function (resolve, reject) {setTimeout(function () {resolve(1)}, 1000)
    })
    let p2 = new Promise(function (resolve, reject) {setTimeout(function () {resolve(2)}, 2000)
    })
    let p3 = new Promise(function (resolve, reject) {setTimeout(function () {resolve(3)}, 3000)
    })
    all1([p3, p1, p2]).then(res => {console.log(res) // [3, 1, 2]
    })

手写 Promise.all相关推荐

  1. javascript --- 手写Promise、快排、冒泡、单例模式+观察者模式

    手写promise 一种异步的解决方案, 参考 Promise代码基本结构 function Promise(executor){this.state = 'pending';this.value = ...

  2. 方法 手写promise_JS探索-手写Promise

    无意间在知乎上刷到Monad这个概念,去了解了一下,前端的Promise就是一种Monad模式,所以试着学习一下手写一个Promise. 本文内容主要参考于 只会用?一起来手写一个合乎规范的Promi ...

  3. 一个下课的时间带你手写promise!

    要手写前先看看用法,用法就是我们的需求 //直接调用 let promise=new Promise((resolve,reject)=>{resolve('123') }) promise.t ...

  4. 手写 Promise

    手写 Promise 实现一个简易版 Promise 在完成符合 Promise/A+ 规范的代码之前,我们可以先来实现一个简易版 Promise,因为在面试中,如果你能实现出一个简易版的 Promi ...

  5. 面试必备--手写Promise.all与.race

    最近面试被问到了手写Promise .all 与 Promise.race,奈何没有自己实现过,只能阿巴阿巴 面完之后,冷静下来思考了该如何实现,并把他写了下来(在实现过程中确实收获不少,让我对这两个 ...

  6. 【Promise】自定义 - 手写Promise - Promise.all - Promise(executor)

    手写Promise 1. 整体结构框架 2. Promise(executor) 3. Promise.prototype.then 4. Promise.prototype.catch 5. Pro ...

  7. c0语言 测试用例,按照 Promise/A+ 手写Promise,通过promises-aplus-tests的全部872个测试用例...

    本文主要讲述如何根据 Promises/A+ 规范,一步步手写一个 Promise 的 polyfill,代码中会配上对应的规范解释. 1. 定义需要的常量和工具方法// 1. 定义表示promsie ...

  8. 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)

    [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...

  9. 手写Promise和all、race等方法,附上原理解析

    手写一个迷你版的Promise JavaScript 中的 Promise 诞生于 ES2015(ES6),是当下前端开发中特别流行的一种异步操作解决方案,简单实现一个迷你版本帮助深入理解 Promi ...

  10. Promise使用,promise原理,手写promise

    Js手写Promise 前言 作为一名合格的前端写手,手写一些常见的方法是不可或缺的一项技能. 手写Promise 涉及到高阶函数,在案例中我也会讲到,从一个小白的视角告诉各位职友 一.Promise ...

最新文章

  1. Ultra-QuickSort POJ 2299(归并排序)
  2. 亿级京东应用架构设计与治理
  3. 8张图带你深入理解Java
  4. 注入游戏没有焦点_《热血传奇怀旧版》即将登陆咪咕快游 盛趣游戏端游上云再落一子...
  5. java怎么在记事本里写过运行_[置顶] 如何运行用记事本写的java程序
  6. numpy——axis
  7. 元宵诗词各一【明书】
  8. Python 利用*args和**kwargs解决函数遇到不确定数量参数问题
  9. 如何使用 Cloud Insight SDK 实现 Druid 监控?
  10. 浅析那些带着“主角光环“的泰坦尼克号幸存者
  11. Markdown字体,字号,颜色和背景色设置
  12. Godaddy域名push教程(域名转出教程)
  13. 新职业教育的三节课,凭什么做到今天这样
  14. 周杰伦演唱会门票还能这样抢?看过来!我用Python实现了大麦网自动抢票功能
  15. 蓝牙宠物食物称重碗方案开发
  16. 一个完整的网站建设需要哪些流程?
  17. Python 取模运算(取余)%误区及详解
  18. 【C++ 科学计算】介绍 C++线性代数和科学计算库 Armadillo
  19. Linux查看服务器的cpu和内存的硬件信息
  20. C++实验 | 定义流对象,实现用write函数将学生信息以二进制方式写到磁盘文件stu.dat中

热门文章

  1. java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...
  2. java同步list_Java集合--ArrayList出现同步问题的原因
  3. java验证json合法性_java校验json字符串是否合法
  4. html语言创建无序列表的标记是,【HTML】 三、文档设置标记
  5. android studio 2.3.1 r丢失,AndroidStudio中 R文件缺失的办法
  6. 比较两个listString是否相等
  7. 闪屏页新手引导页面主页判断跳转的逻辑
  8. python调用nacos账号密码_python-nacos-sdk
  9. 小米笔试题:无序数组中最小的k个数
  10. [******] 链表问题:将单向链表按某值划分成左边小、中间相等、右边大的形式...