Throttle在AngularJS中的承诺
Throttle promises in AngularJS
我有一个web应用程序,它允许用户通过文件输入选择多个文件。一旦用户选择了这些文件,我就通过我剩下的API一个接一个地上传这些文件。然而,在IE中,如果用户一次选择了很多文件(>10),IE将随机中止一些请求(之前发布了一个问题,但此处没有回应)。我能想到的解决这个问题的唯一方法就是限制这些http请求。
例如,如果一个用户选择了20个文件,我想一次激发其中的5个。完成所有5个承诺后,从下一组5个开始。有办法做到这一点吗?
是的,使用promise是可能的。在我的es6 promise模式存储库中,我有一个函数示例可以帮助实现这一点,位于https://github.com/DukeyToo/es6-promise-patterns#resource-限制器。不幸的是,我没有为$q
编写的版本,但翻译起来应该不会太难:)
在你的例子中,它会被这样使用:
var limiter = resourceLimiter(5);
for (var i=0; i<20; i++) {
limiter.take().then(function() {
return $http({..do your request .})
}.then(function(response) {
limiter.give();
//.. then do whatever with response
});
}
基本上,.take
在资源可用时解析,并使用5个资源中的一个。.give
返回资源,并触发下一个.take
进行解析。这个概念很简单,尽管resourceLimiter
的实现很棘手。
相关文章:
- AngularJS$q承诺使用socket.io
- addEventListener 和 angularjs 承诺:把它包起来
- AngularJS因果报应测试规范承诺未解析,且未调用.then()
- AngularJS-我怎么知道何时解决了对父控制器的承诺
- $q.reject和处理AngularJS链接承诺中的错误
- 用angularjs在前臂做出承诺
- Throttle在AngularJS中的承诺
- AngularJS:根据值解析承诺对象
- 访问 angularjs 工厂数据之外的承诺
- AngularJS用承诺填充dropdwon
- 测试嵌套AngularJS与Jasmine的承诺
- AngularJS决心承诺.如果承诺被拒绝,则重定向
- 返回.然后承诺-AngularJS
- Angularjs承诺,不会及时通知绑定的更新进度
- 用Angularjs返回两个承诺,How To Chain So UI有$scope
- AngularJS中承诺的顺序和时间
- Wordpress主题angularJS承诺
- 如何使用AngularJs工厂履行承诺
- 在解决承诺 AngularJS/ES6 后检索存储在服务中的数据
- 如何在视图和手表上处理承诺——AngularJs 1.4