手写 Promise.all
语法
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) 核心思路
- 接收一个 Promise 实例的数组或具有 Iterator 接口的对象作为参数
- 这个方法返回一个新的 promise 对象,
- 遍历传入的参数,用Promise.resolve()将参数"包一层",使其变成一个promise对象
- 参数所有回调成功才是成功,返回值数组与参数顺序一致
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相关推荐
- javascript --- 手写Promise、快排、冒泡、单例模式+观察者模式
手写promise 一种异步的解决方案, 参考 Promise代码基本结构 function Promise(executor){this.state = 'pending';this.value = ...
- 方法 手写promise_JS探索-手写Promise
无意间在知乎上刷到Monad这个概念,去了解了一下,前端的Promise就是一种Monad模式,所以试着学习一下手写一个Promise. 本文内容主要参考于 只会用?一起来手写一个合乎规范的Promi ...
- 一个下课的时间带你手写promise!
要手写前先看看用法,用法就是我们的需求 //直接调用 let promise=new Promise((resolve,reject)=>{resolve('123') }) promise.t ...
- 手写 Promise
手写 Promise 实现一个简易版 Promise 在完成符合 Promise/A+ 规范的代码之前,我们可以先来实现一个简易版 Promise,因为在面试中,如果你能实现出一个简易版的 Promi ...
- 面试必备--手写Promise.all与.race
最近面试被问到了手写Promise .all 与 Promise.race,奈何没有自己实现过,只能阿巴阿巴 面完之后,冷静下来思考了该如何实现,并把他写了下来(在实现过程中确实收获不少,让我对这两个 ...
- 【Promise】自定义 - 手写Promise - Promise.all - Promise(executor)
手写Promise 1. 整体结构框架 2. Promise(executor) 3. Promise.prototype.then 4. Promise.prototype.catch 5. Pro ...
- c0语言 测试用例,按照 Promise/A+ 手写Promise,通过promises-aplus-tests的全部872个测试用例...
本文主要讲述如何根据 Promises/A+ 规范,一步步手写一个 Promise 的 polyfill,代码中会配上对应的规范解释. 1. 定义需要的常量和工具方法// 1. 定义表示promsie ...
- 【学习笔记】Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程、手写 Promise(二、JavaScript 异步编程)
[学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步编程.手写 Promise(课前准备) [学习笔记]Part1·JavaScript·深度剖析-函数式编程与 JS 异步 ...
- 手写Promise和all、race等方法,附上原理解析
手写一个迷你版的Promise JavaScript 中的 Promise 诞生于 ES2015(ES6),是当下前端开发中特别流行的一种异步操作解决方案,简单实现一个迷你版本帮助深入理解 Promi ...
- Promise使用,promise原理,手写promise
Js手写Promise 前言 作为一名合格的前端写手,手写一些常见的方法是不可或缺的一项技能. 手写Promise 涉及到高阶函数,在案例中我也会讲到,从一个小白的视角告诉各位职友 一.Promise ...
最新文章
- Ultra-QuickSort POJ 2299(归并排序)
- 亿级京东应用架构设计与治理
- 8张图带你深入理解Java
- 注入游戏没有焦点_《热血传奇怀旧版》即将登陆咪咕快游 盛趣游戏端游上云再落一子...
- java怎么在记事本里写过运行_[置顶] 如何运行用记事本写的java程序
- numpy——axis
- 元宵诗词各一【明书】
- Python 利用*args和**kwargs解决函数遇到不确定数量参数问题
- 如何使用 Cloud Insight SDK 实现 Druid 监控?
- 浅析那些带着“主角光环“的泰坦尼克号幸存者
- Markdown字体,字号,颜色和背景色设置
- Godaddy域名push教程(域名转出教程)
- 新职业教育的三节课,凭什么做到今天这样
- 周杰伦演唱会门票还能这样抢?看过来!我用Python实现了大麦网自动抢票功能
- 蓝牙宠物食物称重碗方案开发
- 一个完整的网站建设需要哪些流程?
- Python 取模运算(取余)%误区及详解
- 【C++ 科学计算】介绍 C++线性代数和科学计算库 Armadillo
- Linux查看服务器的cpu和内存的硬件信息
- C++实验 | 定义流对象,实现用write函数将学生信息以二进制方式写到磁盘文件stu.dat中
热门文章
- java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...
- java同步list_Java集合--ArrayList出现同步问题的原因
- java验证json合法性_java校验json字符串是否合法
- html语言创建无序列表的标记是,【HTML】 三、文档设置标记
- android studio 2.3.1 r丢失,AndroidStudio中 R文件缺失的办法
- 比较两个listString是否相等
- 闪屏页新手引导页面主页判断跳转的逻辑
- python调用nacos账号密码_python-nacos-sdk
- 小米笔试题:无序数组中最小的k个数
- [******] 链表问题:将单向链表按某值划分成左边小、中间相等、右边大的形式...