在没有全局变量的情况下对多个事件使用 Promise 回调

2024-06-08

我有一个包含在函数中的承诺。我将使用不同的输入参数多次调用该函数。每次承诺解决时,我都会将解决的值推送到存储数组中。

当我所有的调用承诺都得到解决后,我将在其他函数中使用这个存储数组。

是否有任何干净的方法可以在不使用“全局”变量的情况下进行设置?

下面的代码是我能想到的实现这项工作的唯一方法:

// Set global-ish variables that can be referenced from multiple functions
var storageArray = [];
var numberOfPromiseCalls = 10;
var promiseCallsCount = 0;

// Setup promise wrapper
function promiseWrapper(inputParams){
  return new Promise(function(resolve, reject) {
    // awesome stuff at work here using inputParams
    resolve(desiredOutput);
  }
})

// call promise 10 times
for(i=0;i<numberOfPromiseCalls;i++){

  // actual promise call
  promiseWrapper(inputParams[i]).then(function (desiredOutput) {

    // push resolve to storage array
    storageArray.push(desiredOutput);

    // test if this resolve is the "last" resolve of all the promises we called
    promiseCallsCount++;
    if(promiseCallsCount == numberOfPromiseCalls){

      // ************************
      // call a function that can work with the final storageArray
      // ************************

    }
  })
}

我的意思是,上面的代码可以工作,但是感觉很丑。有很多不明确的地方,你必须跟踪可变的层次结构。有更好的方法吗?


我建议你使用Promise.all通过一系列的承诺。调用then当所有承诺都得到解决时,将让您处理所有响应。

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

for (i=0;i<numberOfPromiseCalls;i++){
  storageArray.push(promiseWrapper(inputParams[i]));
}

Promise.all(storageArray).then(responses => {
  // responses is an array of all promises responses
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在没有全局变量的情况下对多个事件使用 Promise 回调 的相关文章

随机推荐

  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • 如何更改JMeter HTTP请求中Post Body的内容

    请原谅我的无知 因为我是一个jmeter菜鸟 我的 web 服务接受 JSON 对象 因此我能够编写一个基本测试 在该测试中我在 http 请求的 Post Body 部分中使用 JSON 对象创建一个 HTTP 请求 不管怎样 我想要做的
  • 如何访问SD卡并返回特定格式的文件并进行数组?

    我需要访问SD卡并返回一些不同格式的文件 该位置将由用户输入 我如何以编程方式执行此操作 西蒙迪德 我相信这就是您正在寻找的 访问SD卡 在android中从sdcard读取特定文件 https stackoverflow com ques
  • 错误:UNABLE_TO_VERIFY_LEAF_SIGNATURE Phonegap 安装

    我正在尝试在 Ubuntu 中安装 Phonegap NodeJS 安装成功 但是我无法安装 Phonegap 本身 这是终端的错误输出 test test VirtualBox sudo npm install g phonegap np
  • Git:需要递归地'git rm'所有bin和obj文件夹的内容

    有人不小心将所有 bin 和 obj 文件夹提交到我们的存储库 大约有 40 个这样的文件夹 我想做一个git rm r在所有这些文件夹上 有命令可以执行此操作吗 有备份 find type d name bin exec git rm r
  • 将任何当前目录“./”添加到Linux中的搜索路径[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何将任何当前目录 添加到 Linux 中可执行文件的搜索路径中 我知道这是一个旧答案 但如果其他人像我一样通过谷歌偶然发现这个问题 这里
  • Pygame 旋转射击

    我和几个朋友一直在编写一种有趣的新射击机制 为了让它发挥作用 我们需要朝玩家面对的方向射击 Sprite 正在使用 Pygame Transform Rotate 进行旋转 我们怎样才能找到一个角度 然后朝那个方向发射子弹呢 这是我们的精灵
  • 如何在 AWS S3 中保存和使用 Spark History Server 日志

    我想在AWS S3中记录和查看Spark历史服务器的事件日志 以下是spark defaults conf中记录的属性 spark hadoop fs s3a impl org apache hadoop fs s3a S3AFileSys
  • 在顶级标题之前将图像添加到 Rmarkdown Bookdown 输出

    下面的例子 即保存为文件index rmd 具有相同的代码块来显示顶级标题上方和下方的图像 但图像不会出现在顶级标题上方 如果有文件 就会发生这种情况 输出 yml仅此条目bookdown gitbook 在同一目录中 该行似乎强制执行一个
  • chrome 中的 Flexbox flex-flow 列换行错误?

    当使用列换行作为弹性流时 它似乎会对 chrome 中的容器尺寸造成问题 HTML 示例 div class root div class outer div class inner A div div class inner B div
  • PHP 性能有多好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这是我最近看到的一篇文章的后续内容 该文章表明 PHP 性能很差 PHP 始终是瓶颈 我的服务器群 让我向您展示 PHP 整体性能 http t
  • 为什么测试在 TeamCity 中运行比直接在 NUnit 中运行需要更长的时间?

    我进行了一些 C 性能测试 基本上运行两种不同的方法 并检查一种方法的运行速度是否比另一种方法快得多 当我在 NUnit 本地运行它们时 其中一个测试的运行速度是另一个测试的十倍 因此我有一个 NUnit 测试 它使用Stopwatch检查
  • 如何停止和重新启动 Android 仪器测试中的活动?

    我正在尝试编写一个停止的 Android 活动仪器测试 onPause then onStop 并重新启动当前活动 我试过 activity finish activity getActivity 但这似乎不能正常工作 测试的目的是断言表单
  • 没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

    我读了https en cppreference com w cpp atomic atomic compare exchange https en cppreference com w cpp atomic atomic compare
  • 如何在行的列中插入当前日期

    如何将当前日期插入 MS SqlServer Mgm Studio 中 编辑数据 视图中的行列中 我想得到等价的值GetDate 函数调用 这是我希望能澄清问题的图片 您无法键入函数 因此请键入日期或以下解决方案之一 创建默认值GetDat
  • 如何创建媒体文件的稳定校验和?

    如何仅创建媒体数据的校验和而不包含元数据以获得媒体文件的稳定标识 最好是使用支持多种格式的库的跨平台方法 例如vlc ffmpeg 或 mplayer 媒体文件应该是常见格式的音频和视频 图像也很好 好吧 可能已经晚了 11 年才得到答案
  • PHP 字符串转日期时间(AM/PM)

    可以将格式为 A H i m d y 的字符串转换为 php 中的日期时间吗 示例字符串 AM 05 28 07 08 13 这不起作用 date DateTime createFromFormat A H i m d y AM 05 28
  • 如何在 Cloud9 上使用 Rails Composer 和 postgreSQL 并在 Heroku 上部署

    使用过程轨道作曲家 https github com RailsApps rails composer使用 postgreSQL 创建 Rails 应用程序Cloud9 http c9 io在 Heroku 上部署充满了警告和错误 可能会让
  • Predict.randomForest 中的错误

    我希望有人能够帮助我解决 R 中 randomForest 包的预测函数遇到的问题 当我尝试预测测试数据时 我不断收到相同的错误 到目前为止 这是我的代码 extractFeatures lt function RCdata feature
  • 在没有全局变量的情况下对多个事件使用 Promise 回调

    我有一个包含在函数中的承诺 我将使用不同的输入参数多次调用该函数 每次承诺解决时 我都会将解决的值推送到存储数组中 当我所有的调用承诺都得到解决后 我将在其他函数中使用这个存储数组 是否有任何干净的方法可以在不使用 全局 变量的情况下进行设