gpt4 book ai didi

angularjs - 如何限制 Angular $q promise 并发?

转载 作者:行者123 更新时间:2023-12-04 21:11:09 24 4
gpt4 key购买 nike

我该怎么做 $q.all但是限制同时执行多少个 promise ?

我的问题就像 How can I limit Q promise concurrency?

I want no more than 5 process spawned at a time



另一个问题的公认答案是为 promise 编写的库。包裹以使用 Q .
但我对 Angular 的解决方案特别感兴趣 $q而不是为 Q .

背景:正在解决的问题:
我有一堆文件要分 2 个步骤下载:a) 获取 URL b) 下载文件。
浏览器限制了可以同时检索的文件数量,因此当直接使用 promise 时 $q.all触发所有下载,只有 N 立即发生,例如 6 在 Chrome 中,而其余的则延迟。 (见 Max parallel http connections in a browser?)
问题是 URL 已过期,因此当浏览器执行第 N+1 个文件下载时,该 URL 不再有效。
所以我想做类似 throttled.all(6, promises) 的事情而不是 $q.all(promise)

最佳答案

如果“所有”Promise 的解析无关紧要(例如您正在更新页面上的某些元素,并且您不在乎它是否是渐进式的,而不是在一个“哇”中),那么我创建了一个简单的 TaskQueue 服务。它不会等待所有 Promises 都被解决,而是会处理所有添加的 Promises/Functions/Tasks,并且最大。配置限制值的并发性。

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

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

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

它只是简单地在添加了 Tasks 之后处理它的队列,Tasks 只是匿名函数,返回一个 promise 或 value。它将遵守服务上可配置的“maxConcurrentTasks”变量。

如果任务返回一个返回一个 promise 的 promise ,依此类推,它将始终使用队列中的初始“槽”。因此,在解决(或拒绝)整个任务 promise 链后,它将为其他添加的任务释放“插槽”。

关于angularjs - 如何限制 Angular $q promise 并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34186545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com