封装一个Promise.all 的函数
// 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 的函数的更多相关文章
- JS 封装一个显示时间的函数
s(); function s (){ var mydate=new Date(); var y = mydate.getFullYear(); var m = mydate.getMonth(); ...
- JS 封装一个求圆面积的函数 传值:半径
y(6) var s = ""; function y (r){ s = Math.PI*r*r; alert(s); }
- Node.js用ES6原生Promise对异步函数进行封装
Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初 ...
- 封装一个Ajax工具函数
/*封装一个ajax工具函数*/ window.$ = {}; /*通过$定义一个ajax函数*/ /* * 1. type string 请求的方式 默认是get * 2. url ...
- promise对象的回调函数resolve的参数为另一个promise对象
/*如果调用resolve函数和reject函数时带有参数,那么它们的参数会被传递给回调函数. reject函数的参数通常是Error对象的实例,表示抛出的错误: resolve函数的参数除了正常的值 ...
- js数据类型的检测总结,附面试题--封装一个函数,输入任意,输出他的类型
一.javascript 中有几种类型的值 1.基本数据类型 : 包括 Undefined.Null.Boolean.Number.String.Symbol (ES6 新增,表示独一无二的值) 特点 ...
- 自己封装一个readline函数实现服务器客户端回射
实现的功能:一次只能读取一行,客户端输入之后,一回车,马上字符串传到服务器端并显示在终端,然后服务器端将字符串又传回给客户端. 服务器端可以接收多个客户端的连接请求,并fork一个子进程来进行服务. ...
- JavaScript封装一个函数效果类似内置方法concat()
JavaScript封装一个函数效果类似内置方法concat() 首先回忆concat()的作用: concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个 ...
- 前端笔记之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 ...
- 代码改变世界 | 如何封装一个简单的 Koa
下面给大家带来:封装一个简单的 Koa Koa 是基于 Node.js 平台的下一代 web 开发框架 Koa 是一个新的 web 框架,可以快速而愉快地编写服务端应用程序,本文将跟大家一起学习:封装 ...
随机推荐
- 【SpringCloud】 Re02 Nacos
运行Nacos注册中心 win版Nacos在bin目录下打开cmd 执行此命令以运行单机模式的Nacos startup.cmd -m standalone 控制台输出: Microsoft Wind ...
- 【DataBase】SQL优化案例:其一
原始SQL: 这里想做的事情就是查询一周的一个计算值 可以理解为报表的那种 主表 t_wechat_clue 生产库上200万数据量 然后需要联表一些限制条件 SELECT IFNULL(SUM((C ...
- 【C】Re05 指针
一.变量 & 指针 变量 = 内存地址 + 存储值 指针变量 = 内存地址 + 存储值[变量的内存地址] 作用: 间接访问内存地址 内存地址 = 地址编号 地址编号:内存中的每个字节唯一的编号 ...
- 【Shiro】08 SpringBoot整合
需要的依赖的坐标: <!-- Shiro依赖 --> <dependency> <groupId>com.github.theborakompanioni</ ...
- 家务机器人(人形机器人)—— Mobile ALOHA: Your Housekeeping Robot
项目地址: https://mobile-aloha.github.io/ 演示视频地址: https://www.youtube.com/watch?v=HaaZ8ss-HP4 论文地址: http ...
- 【转载】 GPU地址空间的相关概念
为了结合上篇 文章 https://www.cnblogs.com/devilmaycry812839668/p/13264080.html 对RTX显卡是否能够实现P2P通信功能,同时专业级别显 ...
- 【深度学习的linux显卡服务器维护记录】 服务器cuda不能用,nvidia-smi报错“Failed to initialize NVML: Driver/library version mismatch”
如题,服务器报错: 查看日志: 发现问题: Starting Daily apt upgrade and clean activities... 这个 apt upgrade 不是普通的update, ...
- 【转载】 miniImageNet数据集介绍
版权声明:本文为CSDN博主「miguemath」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/wangkai ...
- SeaTunnel毕业!首个国人主导的数据集成项目成为Apache顶级项目
采访嘉宾 | 郭炜.高俊 编辑 | Tina 北京时间 2023 年 6 月 1 日,全球最大的开源软件基金会 Apache Software Foundation(以下简称 ASF)正式宣布 Apa ...
- 代码随想录Day12
二叉树遍历 分为前序.中序.后续.层序四种 其中前中后序属于深度优先搜索,层序属于广度优先搜索 前序遍历顺序: 根节点->左子树->右子树 中序遍历顺序: 左子树->根节点-> ...