可以或应该同时运行的 Promise 数量是否有限制?

2024-04-13

令人惊讶的是,谷歌无法返回这个问题的结果。

我想知道在排队并等待下一个完成之前可以或应该并行运行多少个承诺。我想这可能取决于用户的互联网,但我认为值得一问。

如果它基于用户的 ISP/连接类型,是否有办法在启动队列之前测试发送的理想承诺数量?

另外,我是严格从客户端角度说的。所以,单线程js。

示例代码:

    function uploadToServer(requestData){
    return Promise((...));
   }

 function sendRequests(requestArray){
    var count = 0;
    for(var requestData in requestArray){
        if(count<idealAmount){
            uploadToServer(idealAmount).then(count--);
            count++;
       }else{
           // Logic to wait before attempting to fire event
       }

   }
 }

承诺本身没有特定的编码限制。它们只是一个通知系统,你可以拥有数百万个这样的系统(只要你有足够的内存来保存这些 Javascript 对象)。

现在,如果一个 Promise 代表一个底层异步操作(他们通常这样做),那么可以同时运行的特定类型的异步操作的数量很可能会受到一些限制。例如,在某些时候,您可能会遇到单个主机同时接受的请求数量的限制。或者,您可能会遇到本地资源问题,其中有无数的连接。

对于像node.js磁盘I/O操作这样的事情,底层磁盘I/O子系统已经有一个排队系统,因此只有少量操作实际上同时运行,其余的操作都在排队。

因此,要回答关于可以有多少个并发操作的问题,只能在特定类型的异步请求甚至有时甚至是特定类型的接收主机的上下文中进行分析和回答。

如果您知道正在处理大量或潜在大量请求,并且将为数组中的每个项目发送网络请求,那么通常会自己编写限制以避免压垮本地资源或目标主机资源。这通常不是通过队列完成的,而是通过代码仅启动 N 个请求,然后当一个请求完成时,它启动下一个请求,依此类推。 Bluebird 和 Async 库都有为您管理此操作的方法。在蓝鸟中,它是concurrency选项Promise.map()。我还自己手动编写了多次管理并发连接数量的循环,下面是其中一些代码的链接:

Promise.all 消耗了我所有的 RAM https://stackoverflow.com/questions/46654265/promise-all-consumes-all-my-ram/46654592#46654592

Javascript - 如何控制并行访问网络的承诺数量 https://stackoverflow.com/questions/41028790/javascript-how-to-control-how-many-promises-access-network-in-parallel/41028877#41028877

向每分钟只能处理 20 个请求的 API 发出多个请求 https://stackoverflow.com/questions/33378923/make-several-requests-to-an-api-that-can-only-handle-20-request-a-minute/33379149#33379149

使用可变 URL 循环处理 api get 请求 https://stackoverflow.com/questions/48842555/loop-through-an-api-get-request-with-variable-url/48844820#48844820

选择适当的异步方法来进行最大请求/秒的批处理 https://stackoverflow.com/questions/36730745/choose-proper-async-method-for-batch-processing-for-max-requests-sec/36736593#36736593

Nodejs:带有 URL 列表的异步请求 https://stackoverflow.com/questions/47299174/nodejs-async-request-with-a-list-of-url/47299802#47299802

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以或应该同时运行的 Promise 数量是否有限制? 的相关文章

  • 如何将子集合添加到 Firestore 中的文档? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 没有关于如何在Firestore中的文档中添加子集合的文档 那么如何使用Web应用程序添加子集合 我尝试了这个但没有成功 如何使用代码
  • Webpack 编译的 Chrome 扩展抛出 `unsafe-eval` 错误

    使用 Webpack 编译后重新加载 Chrome 扩展时出现此错误 Uncaught EvalError Refused to evaluate a string as JavaScript because unsafe eval is
  • CSS 文本装饰:反向

    我很惊讶 CSS 中没有 text decoration reverse 因为使用 JavaScript 来实现似乎非常尴尬 IE 将元素的前景色和背景色分别设置为父元素的背景色和前景色 我注意到了 JavaScript 技术here ht
  • Nodemon - 使用配置文件指定扩展监视列表

    有没有办法使用配置文件而不是命令行来指定监视列表 Nodemon 文档中的命令行方法 我尝试使用nodemon json配置文件包含以下内容 ext js json hbs html 返回 扩展名匹配 错误 然后我尝试将配置添加到packa
  • React-Native 博览会 POST Blob

    我正在使用 React Native 和 expo 并尝试通过 fetch api 发布 blob 图像 我对正文使用表单数据格式 并且我有下一个代码 const blob await response blob const form ne
  • 使用 JavaScript 将数字缩写(5.2k、1.7m 等)转换为有效整数

    我有一个 Google 文档 其中有一列包含用 速记 编写的各种数字 例如 5k for 5 000 86 62k for 86 620 4 1m for 4 100 000 1 2b for 1 200 000 000 我想使用 Java
  • 未捕获的类型错误:属性...不是函数 - 页面加载后

    我正在使用对外部 API 的跨域 Ajax 请求 有时它会失败 并显示控制台消息 Uncaught TypeError Property photos of object object DOMWindow is not a function
  • 如何字符串化整个 Javascript 对象(包括 __proto__ 属性)?

    如果这是重复的 我很抱歉 到目前为止我找不到相同的问题 我的对象中有一个具有各种方法的对象 proto 成员 我们称这个对象的类型为myObjectType 稍后我必须做一个JSON stringify myObjectType 问题是 当
  • Chrome 扩展 |有什么方法可以让 chrome.storage.local.get() 返回一些东西吗?

    在我的 chrome 扩展中 我需要使用 chrome 存储 在我的后台脚本中 我首先创建一个对象并将其添加到 chrome 存储中 然后我想从那里获取我的对象并返回 像这样的东西 var obj chrome storage local
  • PHP 中的 Javascript“unes​​cape”

    我的图像主机有一个 Google Chrome 扩展程序 它会向我的网站发送一个 URL 该网址得到encoded通过 JavaScript 的escape method 编码的 URLescape看起来像这样 http 253A 4 bp
  • 当 querySelectorAll 在不使用库的情况下不可用时,按属性获取元素?

    p 你怎样才能做到相当于 document querySelectorAll data foo where 查询选择器全部 https developer mozilla org en DOM Document querySelectorA
  • JavaScript 中最大长度的正则表达式

    如何限制与正则表达式匹配的字符串的长度 我假设var sixCharsRegEx 6 7 只匹配长度为 6 或 7 的字符串 but no http jsfiddle net FEXbB http jsfiddle net FEXbB 我缺
  • 通过 JavaScript 获取页面/iframe 的编码

    我想通过 JavaScript 或浏览器中的其他一些 API 以编程方式确定页面的编码 我想要这些信息的原因是因为我试图对主要浏览器支持的字符编码进行模糊测试 显然仅仅因为我发送了适当的 内容类型 并不意味着浏览器会使用编码做正确的事情 欢
  • 规则和夏令时

    我在用着rrule https github com jakubroztocil rrule在我的数据库中创建和存储事件 一切正常 直到我发现我的重复事件与 3 月 31 日之后有一个小时的差异 在法国 这一天我们进行夏令时更改 实际上 我
  • Nodejs Base64 中的读取文件

    我正在尝试从客户端读取以 base64 编码的图像 如何使用nodejs进行阅读 My code add to buffer base64 image var encondedImage new Buffer image name base
  • 通过 javascript 将 onsubmit 添加到表单

    您将如何仅通过 Javascript 将 OnSubmit 属性插入到表单中 我对 javascript 还很陌生 所以如果您能够提供详细的示例代码 那将是最有帮助的 情况是这样的 我通过 Chargify 支付平台 使用托管注册页面来处理
  • ASP.NET 中的 JavaScript 事件处理程序

    我有以下 iframe 控件 旨在成为类似 facebook 的按钮 iframe gt 我在上面定义了 javascript 函数 如下所示
  • 使用 TypeScript / Angular2 循环对象的键/值[重复]

    这个问题在这里已经有答案了 如何使用 TypeScript 迭代对象并能够访问键和值 我的 json 对象看起来像这样 clients 123abc Forename Simon Surname Sample 456def Forename
  • 过早退出 Qualtrics 中的循环和合并块

    我目前正在进行一项 Qualtrics 调查 受访者必须解决一长串字谜问题 然后回答一些人口统计问题 为了使变位词部分更容易 我使用了循环和合并块 第一个字段是要解决的变位词 第二个字段是变位词的解决方案 因此调查可以根据受访者的答案来检查
  • 使用node.js/Express从HTTP重定向到HTTPS

    有什么方法可以更改我的 Web 应用程序以侦听 HTTPS 而不是 HTTP 我正在使用node js express 我需要它来侦听 HTTPS 因为我正在使用地理定位 而 Chrome 不再支持地理定位 除非从 HTTPS 等安全上下文

随机推荐

  • 检查 https 状态代码 ruby

    有没有办法在 ruby 中检查 HTTPS 状态代码 我知道有很多方法可以在 HTTP 中使用require net http 但我正在寻找 HTTPS 也许我需要使用不同的库 您可以在 net http 中执行此操作 require ne
  • 在 Flask-SQLAlchemy 中的同一类中使用不同的绑定

    我目前有多个具有相同表和列 但内部数据不同 的数据库 很明显 我需要使用绑定来访问所有这些 但这显然不像这样做那么简单 class WhateverTable db Model tablename whatevertable whateve
  • 如何在没有 ChunkLoadError 的情况下使用 React 代码拆分和 Firebase 托管

    我需要使用React 代码拆分 https create react app dev docs code splitting 使用托管在 Firebase 托管上的 Create React App 但是 我有一个问题 因为Firebase
  • 有没有办法检测外部 javascript 文件是否已完全加载?

    我有一个使用的网络表单验证码过滤掉机器人 该表格有一个
  • 无法在单元测试中模拟 HttpClient PostAsync()

    我正在使用 xUnit 和 Moq 编写测试用例 我试图模拟 HttpClient 的 PostAsync 但出现错误 下面是用于模拟的代码 public TestADLS Operations var mockClient new Moc
  • 在weblogic上升级jax-rs共享库

    通常weblogic 12c不支持jax rs 2 0 但是通过weblogic本身附带的jax rs共享库的帮助 可以将jax rs版本从1 1升级到2 0 问题是库实现是 jersey 2 5 它不能满足我的需求 我在 weblogic
  • 如何使用Apple的handleQuit方法?

    我制作了一个将数据保存到 data 文件的 java 应用程序 我有一个窗口监听器 它监听应用程序关闭 以便触发代码将数据保存到文件中 当按下我的专用退出按钮或按下窗口上的红色 X 时 一切都很好 然而 当用户选择命令 q 路线时 事情就会
  • 为 python GUI 应用程序授予 root 权限以在 ubuntu 中运行命令

    现在 我有一个 python GUI 应用程序 需要使用 sudo 权限运行命令 如下所示 import commands iStat askpassPath commands getstatusoutput which ssh askpa
  • 处理滚动条和 jquery .width() 方法

    jQuery 的 width 方法似乎没有考虑滚动条 这对我来说是有问题的 因为我想将一些子项的宽度设置为等于其父项的宽度 我使用类似于以下的 jQuery contentDiv width containerDiv width 在这个例子
  • 只是想从 Java Applet 将数据写入串行端口?

    几天来我一直在抓狂地想弄清楚为什么这似乎永远不起作用 首先 这是我的配置 Windows 7 x64JDK 7 x86JRE 7 x86火狐 x86由 Thin 提供服务的 Rails 3Java 设置使得 下一代插件 不处于活动状态 但它
  • Play 2.3.x 可以在没有 Activator(并且使用 maven)的情况下使用吗?

    我这里有两个相关的问题 在 Play 2 2 x 中 发行版捆绑为 zip 文件 可通过 Maven 存储库下载http downloads typesafe com play 2 2 x play 2 2 x zip http downl
  • 未找到 void com.unity3d.player.UnityPlayer.nativeRestartActivityIndi​​cator() 的实现

    我是 Unity 新手 我正在尝试将 Unity 游戏 它有 ARcore 集成到本机 Android 应用程序中 我可以在新的 HelloWorld 应用程序中启动 unity 但无法在我的真实应用程序 具有其他模块 中启动 注意 当我从
  • 使用 Sinon 测试 D3 中的鼠标悬停事件

    我在试图通过测试时遇到了麻烦 我希望能够使用间谍来检查鼠标悬停事件是否被正确调用 目前 我收到以下错误 错误 预计已被调用至少一次但从未被调用 我的部分困惑与 d3 和 jQuery 选择器之间的差异有关 我非常乐意使用后者 但我不确定如何
  • 正则表达式限制字符串大小

    如何限制此正则表达式的字符串大小 a z a z0 9 a z0 9 我只需要添加量词 3 16 撒上一些积极的前瞻 http www regular expressions info lookaround html通过添加来测试字符串的总
  • 令人困惑的苹果应用内购买产品

    我正在创建一个笔记应用程序 例如 iPad 版 Evernote 我决定提供一些应用内购买计划有两个原因 解锁应用程序中的更多功能 应在指定时间段后自动更新 现在我很困惑为此选择哪种类型的应用内购买 我对感兴趣自动续订订阅 访问指南后her
  • SqlCommand.Cancel() 会导致性能提升吗?

    我已经看到它出现在代码中的多个位置 从来没有解释 只是在其上方有一个神秘的注释 包含声明和执行以了解上下文 这只是运行 SqlCommand 的标准过程 SqlCommand cmd new SqlCommand cmd ExecuteRe
  • Swift where 条件检查属性是否已实现

    我刚刚找到了另一种在 Swift 中充分利用协议和协议扩展的方法 即扩展可选协议来添加函数 以便我可以提供默认值 我在这里写了一篇关于此的博客文章 https janthielemann de random stuff providing
  • 获取 DbContext 中当前登录的用户

    出于审计目的 我尝试在 DbContext 中获取当前登录的用户 不过我对此有一些问题 需要考虑以下几点 在 Blazor Server 中我们必须使用 AddDbContextFactory IHttpContextAccessor 在部
  • 如何使用 PHP 从文档中获取数字签名

    我对数字签名这个东西很陌生 我想做的是检查文档是否经过数字签名 如果已签名 则验证签名 我已经搜索了很多 我发现了一些有关验证签名 使用 openssl 的有用主题 但我找不到有关以下内容的任何内容 文档是否已签名 我还在stackover
  • 可以或应该同时运行的 Promise 数量是否有限制?

    令人惊讶的是 谷歌无法返回这个问题的结果 我想知道在排队并等待下一个完成之前可以或应该并行运行多少个承诺 我想这可能取决于用户的互联网 但我认为值得一问 如果它基于用户的 ISP 连接类型 是否有办法在启动队列之前测试发送的理想承诺数量 另