Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angularjs – 我如何限制角度$q承诺并发?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我如何做$q.all这样的事情但是限制同时执行多少个promises?

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

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

背景:问题正在解决
我有两个步骤下载的文件:a)获取URL b)下载文件.
浏览器限制了可以同时检索多少文件,因此当使用$q.all直接使用promises时会触发所有下载,只有N会立即发生,例如Chrome中为6,其余则延迟. (见@L_675_11@)
问题是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’.因此,在解决(或拒绝)整个任务承诺链之后,它将释放“插槽”以用于其他添加的任务.

大佬总结

以上是大佬教程为你收集整理的angularjs – 我如何限制角度$q承诺并发?全部内容,希望文章能够帮你解决angularjs – 我如何限制角度$q承诺并发?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。