加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 07:14:15 所属栏目:安全 来源:网络整理
导读:我如何做$q.all这样的事情但是限制同时执行多少个promises? 我的问题就像How can I limit Q promise concurrency? I want no more than 5 process spawned at a time 对于另一个问题,已接受的答案是为promise编写的库,与Q一起工作. 但我特别感兴趣的是Angul
我如何做$q.all这样的事情但是限制同时执行多少个promises?

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

I want no more than 5 process spawned at a time

对于另一个问题,已接受的答案是为promise编写的库,与Q一起工作.
但我特别感兴趣的是Angular的$q而不是Q的解决方案.

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

解决方法

如果“全部”Promises的解析无关紧要(就像你正在更新页面上的某些元素而你不关心它是否是渐进的而不是一个’嗖’)我创建了一个简单的TaskQueue服务.它不会等待所有Promise被解决,而是会处理它获得的所有添加的Promises / Functions / Tasks以及最大值.配置的限制值的并发性.

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

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

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

它只是简单地处理其队列之后的任务,它们只是匿名函数,返回一个promise或值,被添加.它将遵循服务上可配置的“maxConcurrentTasks”变量.

如果Task返回一个返回promise的promise,那么它将始终使用队列中的初始’slot’.因此,在解决(或拒绝)整个任务承诺链之后,它将释放“插槽”以用于其他添加的任务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读