首页 > 其他分享 >Promise.each()

Promise.each()

时间:2024-10-18 22:58:47浏览次数:5  
标签:迭代 Promise 数组 each 解决 txt

原文:

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 不同,后者会解决为一个包含迭代器函数输出的数组。

标签:迭代,Promise,数组,each,解决,txt
From: https://www.cnblogs.com/zjxcyr/p/18475204

相关文章

  • promise
    Promisepromise是ES6引入的异步编程的新的解决方案,从语法上来说,它是一个构造函数,可以实例化对象,封装异步操作,获取成功和失败的结果,其优点是支持链式调用可以解决回调地狱问题指定回调函数的方式更为灵活1.准备promise是ES6引入的进行异步编程的新的解决方案,从语法上来说,它就......
  • 挑战1000道javascript手写题之实现Promise.all(9)
    Promise.all介绍Promise.all方法接收一个数组作为参数,这个参数数组的元素也都是promise实例,该方法返回一个promise示例。constp=Promise.all([p1,p2,p3]);p的状态由p1、p2、p3决定,p最后的状态要么是变成fulfilled,要么变成rejected。变成fulfilled:只有当p1、p2、p3......
  • [Javascript] Write Promise.all()
    Promise.myAll=function(promises){letres,rej;constp=newPromise((resolve,reject)=>{res=resolve;rej=reject;});leti=0;letresult=[];//sincePromise.allcantakeanyiterableasinput//tocheckwhether......
  • EE4002D AI-Based Teaching
    Commentsfrom02/09meetingwithProfRajeshTotal$2000budgettouse!CoulduseanotsoLmodeliflocallyProjectTemplate:-Problemstatement-Variousoptions[ProsandCons]-SpecificApproachesandimplementation[Splitto2ifneedbe]*-Whatcouldbe......
  • 第147篇:开发中Promise的使用(async,await)
    好家伙, 0.错误描述今天在开发中犯了一个比较严重的错误对于Promise的错误使用 场景:微信小程序中展示搜索条件列表//API请求工具函数constapiRequest=(url,method='GET',headers={})=>{returnnewPromise((resolve,reject)=>{wx.request({......
  • 深入理解 JavaScript 异步:掌握 Promise、Async/Await 与 Promise.all 全指南
    博文:深入理解JavaScript中的Promise、await、.then()和Promise.all()在现代JavaScript中,处理异步操作时,Promise、async/await和Promise.all()是关键工具。本文将深入讲解它们的用法及实现,并结合实际例子。1.Promise的基本使用Promise是一种处理异步操作的方式。......
  • C++异步调用 future async promise packaged_task
    背景:C++异步调用是现代C++编程中的一种重要技术,它允许程序在等待某个任务完成时继续执行其他代码,从而提高程序的效率和响应性。C++11引入了std::async、std::future和std::promise等工具,使得异步编程变得更加方便和直观。以下是关于C++异步调用的详细介绍,包括基本概......
  • JS异步编程精通之路(一):Callback、Promise、Async/Await 和 Observable 深度对比
    在现代JavaScript编程中,异步操作是常见且必不可少的部分。处理异步的方式多种多样,其中最常见的有Callback、Promise、Async/Await,以及近年来随着响应式编程(ReactiveProgramming)理念兴起的Observable。本文将对这几种异步处理方式进行对比,帮助你理解它们各自的优缺点,以......
  • JavaScript中Promise学习
    Promise是强大的异步编程工具,它允许我们更好的管理和处理异步操作。这里将探讨Promise中的reject以及如何使用catch来处理异步错误 什么是promise?promise是一种代表异步操作最终完成或失败的对象。它有三种状态:1、Pending(进行中):初始状态,既不成功也不失败2、Fulfilled(已成......
  • 异步场景: promise、async函数与await命令介绍
    如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。在鸿蒙的开发中,我们时常会遇到promise异步场景,有同学反馈说希望提一下。异步开发这部分的内容比较多,我不确定这位朋友具体想讨论是哪些方面,那我从......