// 1. 准备三个异步函数
const promise1 = Promise.resolve('prom11ise1');
const promise2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 2000, 'promise2');
});
const promise3 = new Promise(function (resolve, reject) {
setTimeout(resolve, 1000, 'promise3');
}); // 2. 封装PromiseAll函数 返回的结果是一个new Promise 信息是一个数组 data
const PromiseAll = (iterator) => {
// 对传入的数据进行浅拷贝,确保有遍历器 - 类数组转换真数组
const promises = Array.from(iterator);
const len = promises.length; // 长度 3
let index = 0; // 每次执行成功+1,当等于长度时,说明所有数据都返回,则可以resolve
let data = []; // 用来存放返回的数据数组
return new Promise((resolve, reject) => {
// 遍历逐个执行 Promise
for (let i in promises) {
promises[i]
.then((res) => {
data[i] = res; // 如果成功了就保存 message
// 先判断 是否全部都执行成功了 成功执行 resolve 并把 data 数组返回
// 如果没有全部执行 index+1
if (++index === len) {
resolve(data);
}
})
.catch((err) => {
reject(err); // 只要有一次error直接返回 reject
});
}
});
}; // 3. 调用
PromiseAll([promise1, promise2, promise3]).then(function(values) {
console.log(values); // 结果: ["prom11ise1", "promise2","promise3"]
});

Promise是一种抽象异步处理对象,参数值为一个回调函数。该回调函数又使用两个参数,参数值分别为两个回调函数(resolve,reject),如果执行成功则调用resolve回调函数,否则执行reject回调函数。

Promise.all介绍:promise.all(promises),promises参数是一个数组(iterable类型),数组内的元素都是promise对象,当里面的每一个promise对象都返回成功resolve的回调函数,它则返回包含数组内每一个元素信息的成功回调函数(resolve),当数组内有一个或以上promise对象返回失败的回调函数,则最后也会返回调用失败的回调函数(reject)。

ps:Array,Map,Set都属于ES6的iterable类型。

封装一个Promise.all 的函数的更多相关文章

  1. JS 封装一个显示时间的函数

    s(); function s (){ var mydate=new Date(); var y = mydate.getFullYear(); var m = mydate.getMonth(); ...

  2. JS 封装一个求圆面积的函数 传值:半径

    y(6) var s = ""; function y (r){ s = Math.PI*r*r; alert(s); }

  3. Node.js用ES6原生Promise对异步函数进行封装

    Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初 ...

  4. 封装一个Ajax工具函数

    /*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type   string   请求的方式  默认是get * 2. url     ...

  5. promise对象的回调函数resolve的参数为另一个promise对象

    /*如果调用resolve函数和reject函数时带有参数,那么它们的参数会被传递给回调函数. reject函数的参数通常是Error对象的实例,表示抛出的错误: resolve函数的参数除了正常的值 ...

  6. js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型

    一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...

  7. 自己封装一个readline函数实现服务器客户端回射

    实现的功能:一次只能读取一行,客户端输入之后,一回车,马上字符串传到服务器端并显示在终端,然后服务器端将字符串又传回给客户端. 服务器端可以接收多个客户端的连接请求,并fork一个子进程来进行服务. ...

  8. JavaScript封装一个函数效果类似内置方法concat()

    JavaScript封装一个函数效果类似内置方法concat() 首先回忆concat()的作用: concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个 ...

  9. 前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数

    一.AMD和CMD规范(了解) 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){ return 3.14 * r * r } main.j ...

  10. 代码改变世界 | 如何封装一个简单的 Koa

    下面给大家带来:封装一个简单的 Koa Koa 是基于 Node.js 平台的下一代 web 开发框架 Koa 是一个新的 web 框架,可以快速而愉快地编写服务端应用程序,本文将跟大家一起学习:封装 ...

随机推荐

  1. 【Java】Enumeration Class 枚举类

    枚举类 enum 对象是有限的确定的.属于类的(静态的) 适合定义一组常量 例如固定的一些事物: - 季节 - 性别 - 状态 自定义枚举类的使用 public class EnumerationTe ...

  2. 【Spring】07 后续的学习补充 vol1

    控制反转Inverse Of Control的演变: 在之前的原生Javaweb项目的问题: 我们三层架构每一层之间的联系是这样的: 由GradeDao接口指向GradeDaoImpl 再由Grade ...

  3. 灵巧手 —— 智能仿生手 —— 人形机器人(humanoid)

    产品主页: https://www.brainco.cn/#/product/brain-robotics 国内销售的一款产品,美国华人生产的,灵巧度非常高的一款仿生手产品.

  4. Ubuntu18.04下 修改conda环境和缓存默认路径

    查看conda 的默认环境和缓存默认路径:conda info  conda环境和缓存的默认路径(envs directories 和 package cache) envs directories  ...

  5. 老版本mujoco: mujoco 1.31 1.40 1.50 2.00 版本下载地址

    下载地址: https://www.roboti.us/download.html 激活码下载地址: https://www.roboti.us/file/mjkey.txt 安装教程: https: ...

  6. 使用pybind11为Python编写一个简单的C语言扩展模块

    相关: 为Python编写一个简单的C语言扩展模块 在Pybind11 出现之前为Python编写扩展模块的方法有多种,但是并没有哪种方法被认为一定比其他的好,因此也就变得在为Python编写扩展模块 ...

  7. 强化学习的REIINFORCE算法和交叉熵RL算法

    注意: 本文并不讲REINFORCE算法,而是讲强化学习的交叉熵算法,关于REINFORCE算法可以参看: https://www.cnblogs.com/devilmaycry812839668/p ...

  8. Oracle数据库表转换为Mysql表

    1.背景 在实际开发中,可能会涉及到开始是Oracle数据库,但是后面想使用mysql数据库 那么这时候我们就需要使用到Oracle数据库转变为mysql数据库 2.具体步骤 步骤一:导出Oracle ...

  9. 用户案例 | Apache DolphinScheduler 离线调度在自如多业务场景下的应用与实践

    用户案例 | 自如 随着自如业务的快速发展,不断增长的调度任务和历史逾万的存量任务对平台稳定性提出了更高的要求.同时,众多非专业开发人员也需要一种更为"亲民"的调度平台使用体验. ...

  10. bat 随笔

    bat 获取文件名 %%~nxi bat 变量去除空字符 BAT批处理中的字符串处理详解(字符串截取)