Promise.all的实现和原理

Promise.all 功能:

Promise.all(iterable)返回一个新的Promise实例,此实例在iterable参数内素有的Promise都fulfilled或者参数中不包含Promise时,状态变成fulfilled。

如果参数中Promise有一个失败rejected ,此实例回调失败,失败原因的是第一个失败Promise的返回结果let p = Promise.all([p1,p2,p3])

复制代码p的状态由 p1,p2,p3决定,分成以下;两种情况:

(1)只有p1、p2、p3的状态都变成 fulfilled,p的状态才会变成 fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

(2)只要p1、p2、p3之中有一个被 rejected,p的状态就变成 rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

Promise.all 的特点:    Promise.all的返回值是一个Promise实例Promise.all = function (promise) {

return new Promise((resolve, reject) => {

let index = 0

let result = []

if (promise.length === 0) {

resolve(result)

} else {

function processValue(i, data) {

result[i] = data

if (++index === promise.length) {

resolve(result)

}

}

for (let i = 0; i < promise.length; i++) {

Promise.resolve(promise[i]).then((data) => {

processValue(i, data)

}, (err) => {

reject(err)

return

})

}

}

})

}

all方法 手写promise_试题-手写实现一个 promise.all - 拿OFFER相关推荐

  1. html中collapse代码怎么写,面试题: 手写collapse(折叠组件)的css/html部分

    做一个组件库不难 其实vue/react等框架的出现, 让自己做一个ui变得简单, 大部分的js逻辑都被库封装, 反而组件的代码主要都是css, 所以只要css写好了, 一个组件就完成60%以上了. ...

  2. all方法 手写promise_前端进阶高薪必看手写源码篇

    前言 此系列作为笔者之前发过的前端高频面试整理的补充 会比较偏向中高前端面试问题 当然大家都是从新手一路走过来的 感兴趣的朋友们都可以看哈 初衷 我相信不少同学面试的时候最怕的一个环节就是手写代码 大 ...

  3. 方法 手写promise_手写Promise类

    手写简单promise 1.分析promise核心逻辑 先看一段代码 let p = new Promise(); //说明Promise是一个类(class),需要new实例化 let p = ne ...

  4. 方法 手写promise_实现一个符合 Promise/A+规范的 Promise(typescript 版)

    (给前端大全加星标,提升前端技能) 转自:Col0ring juejin.cn/post/6886360224308035598 写在前面 没错,这又是一篇关于手写 Promise 的文章,想必大家已 ...

  5. all方法 手写promise_实现Promise.allSettled

    离上次写了 Promise.all 实现之后,已经隔了,呃,快一年了... 为什么又想起来写 Promise 的其他静态方法的实现呢?原因是最近已经连续两次收到了某跳动公司的面试邀请了.想着虽然不一定 ...

  6. all方法 手写promise_我团队的一年前端实现Promise所有方法

    从零手写Promise完整版 随着前端技术的不断发展,用户对界面的要求也在不断提高,现在的前端不再是之前的html+css, 而是html+css+js,但是想学好js首先要知道js的核心在于异步,说 ...

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

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

  8. python手写代码面试_常见Python面试题—手写代码系列

    原标题:常见Python面试题-手写代码系列 1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reverse tempList = [1,2,3,4] tempList.reverse( ...

  9. 高级前端必会手写面试题及答案

    循环打印红黄绿 下面来看一道比较典型的问题,通过这个问题来对比几种异步编程方法:红灯 3s 亮一次,绿灯 1s 亮一次,黄灯 2s 亮一次:如何让三个灯不断交替重复亮灯? 三个亮灯函数: functi ...

最新文章

  1. 2022-2028年中国美瞳行业应用市场需求及开拓机会研究报告
  2. python中国大学排名爬虫写明详细步骤-python爬虫爬取2020年中国大学排名
  3. php循环给数组每个值加引号,php数组非数字键名加引号的必要性!
  4. leetcode 802. Find Eventual Safe States | 802. 找到最终的安全状态(有向图DFS)
  5. 专注于元宇宙后 Meta今年将取消举办F8开发者大会
  6. 12.性能之巅 洞悉系统、企业与云计算 --- 基准测试
  7. Windows环境下hadoop安装和配置详细步骤
  8. UnityC#实现中文汉字转拼音-使用微软CHSPinYinConv库
  9. 【Python】爬取贝壳网深圳二手房数据
  10. JSON for modern c++ / nlohmann
  11. 2023年天津仁爱学院专升本动画专业报考专业限制范围目录
  12. Linux下启动Tomcat项目
  13. 电脑版微信多开,最详细教程没有之一
  14. springboot项目实现站内信功能记实
  15. jenkins 下载插件失败处理办法
  16. java同一秒请求多次接口_java – 限制用户每秒发出有限的请求
  17. letcode 715
  18. jupyter的使用
  19. 专科段《工商企业管理》课程复习资料(5)——案例分析题
  20. 计算机网络连接密码如何查到,宽带拨号密码怎么查 看?

热门文章

  1. php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path
  2. hasLayout和filter滤镜的细节
  3. oracle逻辑备份和物理备份,Oracle备份与恢复介绍(物理备份与逻辑备份)
  4. saltstack部署java应用失败无日志——CICD 部署
  5. vue实现监听滚动条
  6. jeecg自定义datagrid查询
  7. 潍职e校帮APP功能简介
  8. Android 图片识别、图像识别
  9. Android应用安装apk版本升级,适配Android 8.0和Android 10.0下载安装,shell命令安装APK
  10. 重建AD域控制器的DNS服务器