如何限制角度 $q 承诺并发?

2024-01-04

我该怎么做$q.all但限制同时执行的承诺数量?

我的问题就像如何限制 Q Promise 并发数? https://stackoverflow.com/q/20546373/135114

我希望一次生成的进程不超过 5 个

另一个问题的公认答案是一个为promise https://github.com/then/promise包装以配合使用Q https://github.com/kriskowal/q。 但我对 Angular 的解决方案特别感兴趣$q而不是为了Q.

Background: The problem being solved:
I have a bunch of files to download in 2 steps: a) Get URL b) download file.
The browser limits how many files can be retrieved concurrently, so when the straightforward use of promises with $q.all fires off all the downloads, only
N happen right away, e.g. 6 in Chrome, while the rest are delayed. (see Max parallel http connections in a browser? https://stackoverflow.com/q/985431/135114)
Problem is that the URLs have expiry, so by the time the browser executes the N+1th file download, the URL is no longer valid.
So I want to do something like throttled.all(6, promises) rather than $q.all(promise)


如果“所有”Promise 的解析是无关紧要的(就像您正在更新页面上的某些元素,并且您不关心它是否是渐进的而不是一次性的),我创建了一个简单的任务队列服务。它不会等待所有承诺都得到解决,而是会处理它获得的所有添加的承诺/功能/任务,并且最多处理。配置的限制值的并发数。

因为我只发现这个和其他一些 StackOverflow 对我的问题没有帮助。所以我想我现在会回馈社区一些东西。希望它对某人有帮助。

它使用现代 JS 的东西,如 const 和 lambda 表达式,但如果你只想要“旧”的东西,你可以简单地让它从像 babel 之类的预编译器编译下来。

https://gist.github.com/Blackskyliner/8b1bafed326044fa4f8b1ba2627d1117 https://gist.github.com/Blackskyliner/8b1bafed326044fa4f8b1ba2627d1117

它只是在添加任务后简单地处理其队列,任务只是返回承诺或值的匿名函数。它将遵循服务上的可配置“maxConcurrentTasks”变量。

如果任务返回一个承诺,该承诺又返回一个承诺等,它将始终使用队列中的初始“槽”。因此,在整个任务承诺链得到解决(或拒绝)后,它将为其他添加的任务释放“槽”。

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

如何限制角度 $q 承诺并发? 的相关文章

随机推荐

  • 如何从主机到 mysql docker 容器执行 mysqldump 命令

    我想为在 docker 容器中运行的数据库创建 mysql 转储 但是 我不想进入容器并执行命令 而是从主机执行此操作 有没有办法做到 我尝试了一些东西 但可能我的命令是错误的 docker exec d mysql sh mysqldum
  • 如何修复 checkmarx 信任边界违规

    我保留用户输入请求中的值 查克马克思抱怨有违反信任边界 从元素请求获取用户输入 该元素的值在没有经过适当清理或验证的情况下流经代码 并最终存储在服务器端 Session 对象中 我还发现这个帖子 https stackoverflow co
  • Java 基本数据类型修饰符是什么?

    好吧 我已经用 Java 编程三年了 现在 我认为自己非常有经验 然而 在查看 Java SE 源代码时 我遇到了一些意想不到的事情 in class Double public static final double MIN NORMAL
  • MPI 中的幽灵细胞交换模式

    我正在使用 MPI 实现分布式图像 灰度 卷积 我现有的模式是在根进程中将图像读取为一维扁平数组 然后将它们分散到所有进程 行分解 然后执行MPI Gather在根进程中 然后再次将图像作为一维展平数组写出 显然 这不会给出预期的结果 因为
  • Arduino 无法被识别

    我不确定这是问问题的正确地方 但我在 stackoverflow 上看到过其他 Arduino 线程 所以我认为没问题 我的 arduino uno 兼容板未被识别 我在 Windows 8 和 Windows XP 上尝试过 当我打开设备
  • 以编程方式设置并保存与导入资源关联的图标

    我有一些自动生成的数据被导出到我的 Unity 项目中 为了帮助我 我想为这些资产分配一个自定义图标以清楚地识别它们 这当然可以通过编辑器本身实现 但理想情况下我希望在导入时自动发生 为此 我编写了一个 AssetPostProcessor
  • 有 WEBGL 手册吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有某种 WebGL 手册列出了所有功能等 我尝试谷歌但一无所获 这两个资源对我帮助很大 Mozill
  • jquery 选择器不适用于使用 Cassette 的脚本标记内的元素

    当尝试使用访问数据加载时 index data onload 我回来了 undefined 如果没有周围的脚本标签 一切都会正常工作 这是使用加载的Cassette http getcassette net 它将它包装在脚本标签内 我究竟做
  • 从 Keras model.evaluate 和 model.predict 获得不同的结果

    我已经使用 word2vec 训练了一个模型来预测主题类别 并使用 keras 训练了一个 lstm 模型 并且在训练过程中获得了大约 98 的准确率 我保存了模型 然后将其加载到另一个文件中以尝试测试集 我使用model evaluate
  • 通过 HTTP / mod_svn 访问 SVN 存储库的旧版本

    使用 Apache 的 mod svn 模块 您不仅可以通过 SVN 客户端访问存储库 还可以使用相同的 URL 直接通过 HTTP 访问存储库 在这种情况下 您只会得到一个显示 HEAD 修订版的普通目录列表 如果 SVN 存储库已在 S
  • Spotify Web API 将新的可控设备添加到 Spotify 设备列表

    我尝试设置一个能够通过 Spotify Web API 使用 Spotify 功能的新设备 有一个API调用https developer spotify com web api get a users available devices
  • JavaScript - 双击选择“前代码块”内的所有文本

    我的博客上有一些代码块 我希望当有人双击代码块时 需要选择该代码块的所有代码 请看下面的代码 这是我到目前为止所得到的 尽管它使用的是jQuery Now 是否可以使用本机 JavaScript 无需 jQuery 抱歉 如果我问了一个愚蠢
  • 使用 opencv 流式传输 m3u8 文件

    我正在尝试使用 python 中的 cv2 和以下代码从 GoPro 捕获实时流 VIDEO URL http 10 5 5 9 8080 live amba m3u8 cam cv2 VideoCapture VIDEO URL cv2
  • 从 csv 字符串中进行 SQL 搜索

    我正在做一个搜索页面 我必须使用单个文本框搜索多个字段 所以我将在存储过程中以 CSV 字符串形式获取搜索文本 我的表如下 ID Name age 5 bob 23 6 bod harry 34 7 charles 44 我需要一个像这样的
  • 声明“extern struct cpu *cpu asm("%gs:0");”是什么意思意思是?

    当我阅读 xv6 源代码时 我对下面声明的语法感到困惑 谁能给我解释一下吗 extern struct cpu cpu asm gs 0 我假设你明白什么extern struct cpu cpu方法 你的问题是 asm gs 0 部分意思
  • 角度,指令中,向模板添加带有 ng 模型的元素

    我正在尝试在指令中添加带有 ng model 的输入元素 my code http jsfiddle net Ajsy7 1 我的指令的链接功能 link function scope element attrs var elem 0 an
  • 读取/解密加密的XML文件,然后进行内部处理

    我过去曾使用此代码来写入和读取 xml 文件 这次我想编写一些加密的生成的 XML 然后读取它并在内部处理它 我将发布代码 也许有人可以发现问题 当我测试解密时 我已经能够输出一个具有连续行空字符代码的文件 加密文件似乎包含数据 并且随着数
  • 如何在 Windows 上将 svn 存储库转换为 git

    我们有远程 svn 存储库 我们希望将其转换为 git 你能告诉我如何在 Windows 上做到这一点吗 感谢 在 Windows 上安装应用程序 适用于 Windows 的 Git https github com git for win
  • 如何在 Windows 8.1 x64 上安装 VB6 SP6?

    需要直接在最新的操作系统中支持一些旧项目 而不是在虚拟机中 我已成功从 VS6 磁盘 1 安装了 VB6 但无法为此开发环境安装 SP6 当我启动它时 会出现一个信息窗口 通知我安装进度几毫秒 但系统文件夹中所需的文件 ADVPACK DL
  • 如何限制角度 $q 承诺并发?

    我该怎么做 q all但限制同时执行的承诺数量 我的问题就像如何限制 Q Promise 并发数 https stackoverflow com q 20546373 135114 我希望一次生成的进程不超过 5 个 另一个问题的公认答案是