Promise.each()

news/2024/10/18 23:08:45/文章来源:https://www.cnblogs.com/zjxcyr/p/18475204

原文:

http://bluebirdjs.com/docs/api/promise.each.html

 

正文:

Promise.each 是一个异步迭代函数,它接受一个可迭代对象(例如数组)或一个可迭代对象的 Promise,并在每个元素上执行给定的迭代器函数。如果元素是一个 Promise,迭代器会等待它解决后再继续。迭代器函数的签名是(value, index, arrayLength),其中 value 是当前元素(如果它是一个 Promise,则为其解决后的值)。

如果在任何步骤中:

  • 迭代器返回了一个 Promise 或一个 thenable,会等待它解决后再继续下一个迭代。
  • 当前迭代的元素是一个待解决的 Promise,会等待这个 Promise 解决后再运行迭代器。
  • 当前迭代的元素是一个被拒绝的 Promise,迭代将停止,并且也会以同样的原因被拒绝。

如果所有迭代都成功解决,Promise.each 调用将解决为一个新数组,包含原始输入元素的解决值。

Promise.eachPromise.mapSeries 非常相似。Promise.eachPromise.mapSeries 之间的差异在于它们的解决值。Promise.each 如上所述解决为一个数组,而 Promise.mapSeries 解决为一个数组,其中包含迭代器函数在每一步的输出。这样,Promise.each 主要用于副作用操作(因为迭代器的输出基本上被丢弃了),就像数组的原生 .forEach() 方法一样,而 Promise.map 用作数组的原生 .map() 方法的异步版本。

基本示例:

javascript
// 要迭代的数组可以是值和 Promise 的混合。
var fileNames = ["1.txt", Promise.resolve("2.txt"), "3.txt", Promise.delay(3000, "4.txt"), "5.txt"];Promise.each(fileNames, function(fileName, index, arrayLength) {// 迭代将顺序执行,等待过程中的任何 Promise。return fs.readFileAsync(fileName).then(function(fileContents) {// ...// 迭代器的最终解决值是不相关的,因为 `Promise.each` 的结果与迭代器的输出无关。return "anything"; // 不重要});
}).then(function(result) {// 这将在最后一步完成后运行console.log("Done!");console.log(result); // ["1.txt", "2.txt", "3.txt", "4.txt", "5.txt"]
});

包含数组中被拒绝 Promise 的示例:

javascript
// 如果原始数组中的一个 Promise 被拒绝,
// 一旦遇到它,迭代将停止
var items = ["A", Promise.delay(8000, "B"), Promise.reject("C"), "D"];Promise.each(items, function(item) {return Promise.delay(4000).then(function() {console.log("On iterator: " + item);});
}).then(function(result) {// 这不会运行
}).catch(function(rejection) {console.log("Catch: " + rejection);
});// 上面的代码在 12 秒后输出以下内容(不是 16 秒!):
// On iterator: A
// On iterator: B
// Catch: C

解释:Promise.each 函数用于按顺序处理数组中的每个元素,如果元素是 Promise,则会等待它解决。如果迭代器函数返回一个 Promise,会等待它解决后再继续。如果遇到被拒绝的 Promise,迭代将停止。如果所有迭代都成功,Promise.each 将解决为一个包含原始输入元素解决值的数组。这与 Promise.mapSeries 不同,后者会解决为一个包含迭代器函数输出的数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/817114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(文末免费送书)

本文详细讲解 transformers 推理大语言模型的初始化过程,包括 Python 包搜索、LazyModule 延迟模块、模块搜索和 Python 包 API 设计美学……上周收到一位网友的私信,希望老牛同学写一篇有关使用 transformers 框架推理大模型的技术细节的文章。 老牛同学刚开始以为这类的文章…

UI开发概述

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs…

MiGPT让你的小爱音响更聪明

大家好,我是晓凡。 今天要给大家带来一个超级有趣的开源项目MiGPT。 这个项目,简直就是给小爱音箱装上了超级大脑,让你的小爱音箱更聪明。 想象一下,当小爱音箱接入大模型后,上知天文,下知地理,从“人工智障”秒变学霸。 一、什么是MiGPTMiGPT是一个由idootop团队开发的…

基于amis后端低代码平台

写这个平台是为了解决多年对于项目的困扰,不想碰到新项目就重新来,通过业务模块的积累,能进行模块化安装。新的项目只需要安装模块就能搭建一套完整的业务系统。amis-api 的所有基础代码都以模块的形式组合在一起。这些模块可以随时从数据库中安装或卸载。这些模块有两大目的…

数据采集与融合技术实验课程作业一

数据采集与融合技术实验课程作业一作业所属课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology作业链接 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13286gitee码云代码位置 https://gitee.com/wang-qi…

C3P0 链子分析学习

C3P0 链子分析学习 概述 C3P0是一个开源的数据库连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池,使用它的开源项目有Hibernate…

20241018每日一题洛谷P2386

普及 每日一题 信息学竞赛 1206:放苹果 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 第一行是测试数据的数目t(0<=t<=20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N…

图片与向量的关系

如何从向量角度描述表示图片黑白图片黑白图片(灰度图)通过 2 维向量(矩阵)来表达。2个维度的长度分别代表了图片的高度和宽度(以像素为单位),向量元素记录着每一个像素的灰度(数值越大,颜色越浅) 例如下面右图矩阵标注了左图像素点的灰度分布:彩色图片彩色图片通过 …

数据采集与融合技术第二次作业

学号姓名 102202132 郑冰智这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13285这个作业的目标 爬取天气网、股票相关信息、中国大学2021主榜所有院校信息,并存储在数据库中实验二仓库地址 https://gitee.com/zheng…

【LGR-203-Div.4】洛谷入门赛 #28

【LGR-203-Div.4】洛谷入门赛 #28\(A\) luogu B4042 [语言月赛 202410] 顺序结构 \(AC\)顺序结构。点击查看代码 int main() { ll a;cin>>a;cout<<3*(5+a)<<" "<<3*a+5<<endl;return 0; }\(B\) luogu B4043 [语言月赛 202410] 刻度尺…

uni-app小程序(快手、抖音)getCurrentPages使用坑位记录2

前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,现公司项目就是主推uni-app,我主要负责抖音和快手端小程序。 坑位 公司历史原因项目有APP端小程序端,但并不使用uni-app的一端发布所有平台,…

二叉查找树和笛卡尔树

二叉查找树~和笛卡尔树目录二叉查找树定义作用操作查找插入删除缺点笛卡尔树定义操作构造 二叉查找树 定义 ​ 二叉查找树(Binary Search Tree,BST),又名二叉搜索树或二叉排序树。 ​ 它是一类特殊规定的二叉树,它应当满足以下条件:每个节点有唯一确定的权值 非叶子节点的…