主干:等待多次提取继续
Backbone: Wait for multiple fetch to continue
我获取多个页面的集合,我正在寻找一种方法来知道何时完成所有获取。以下是我的收藏:
app.collections.Repos = Backbone.Collection.extend({
model: app.models.Repo,
initialize: function(last_page){
this.url = ('https://api.github.com/users/' + app.current_user + '/watched');
for (var i = 1; i <= last_page; i++) {
this.fetch({add: true, data: {page: i}});
};
}, ...
知道我如何用干净的代码实现这一点吗?
使用jQuery延迟:
var deferreds = [];
for (var i = 1; i <= last_page; i++) {
deferreds.push(this.fetch({add: true, data: {page: i}}));
};
$.when.apply($, deferreds).done(function() {
...
<CODE HERE>
...
}
(我还没有真正测试过,但我认为它应该有效。)
jQuery关于when
:的文档
提供一种基于一个或多个对象执行回调函数的方法,这些对象通常是表示异步事件的Deferred对象。
另一个可能有帮助的答案是:如何处理jQuery Deferred数组?
一个选项是使用underscore.js
'after
-函数(docs),但这需要使用成功回调,因为会有很多添加事件:
initialize: function(last_page){
this.url = ('https://api.github.com/users/' + app.current_user + '/watched');
var self = this; // save a reference to this
var successCallback = _.after(function() {
self.trigger('allPagesFetched'); //trigger event to notify all listeners that fetches are done
}, last_page); // this function will be called when it has been called last_page times
for (var i = 1; i <= last_page; i++) {
this.fetch({add: true, data: {page: i}, success: successCallback});
};
},
希望这能有所帮助!
相关文章:
- 在数据提取完成之前进行页面渲染
- 如何在Javascript中从字符串中提取某些单词
- 为什么继续;语句冻结浏览器
- RegEx JavaScript:数字后的符号提取
- 如何在内联依赖项并将图像转换为dataURI的情况下完全提取网页
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 继续使用javascript中的setTimeout
- Regex提取URL返回数组的一部分;未定义”;
- 如何提取“;href"最近列表项中的属性值
- 使用时刻.js从日期时间中提取时间
- 通过javascript从会话中提取用户名
- HTML页面如何提取通过表单传递的参数
- 当一些承诺失败时,如何继续使用$q.all()
- 是否可以自动拉取“随机”;标签“;从一长串文本中提取
- innerHTML的子字符串可以在初始调用时提取吗
- 如何使用phonegap从安卓设备中提取联系人的字母顺序
- Tab键不会't继续chrome/IE11中的表单字段
- 主干:等待多次提取继续
- 进行 ajax 调用,如果不是所需的结果,则提取一个值,然后继续重复,直到达到所需的结果
- 从数组(切片)中提取x个项目,但如果到达末尾,则从头开始继续