我正在尝试让我的骨干应用程序尽可能频繁地检查服务器以更新模型,类似于twitter的网站如何自动添加新推文。
我目前的设置是通过他们的api检查外部应用程序,所以我无法访问他们的服务器,这使我依赖客户端进行检查而不会太忙,我怎么能实现这个?
答案 0 :(得分:3)
在Javascript中,你可以真正控制时间的唯一方法是通过setTimeout / setInterval;没有“更复杂”的机制,除非你计算包装setTimeout / setInterval的辅助函数(例如'delay')。
所以,dmi3y的回答是正确的。但是,既然您在标签和说明中都提到了Backbone,那么这是一个更多的Backbone-ish版本...
var YourModelClass = Backbone.Model.extend({url: remoteUrl});
var instance = new YourModelClass();
var seconds = 5;
window.setInterval(_.bind(instance.fetch, instance), 1000 * seconds);
或者,如果你想把它建在你的班级......
var YourModelClass = Backbone.Model.extend({
url: remoteUrl,
initialize: function() {
var seconds = 5;
window.setInterval(_.bind(this.fetch, this), 1000 * seconds);
}
});
var instance = new YourModelClass();
还值得一提的是,如果你想停止“轮询”,setInterval会返回一个可以传递给clearInterval的对象。
P.S。如果您不熟悉_.bind
,它来自Underscore库,Backbone依赖于它,因此您已经拥有它。它所做的就是修复this
,这样当你的超时/间隔函数结算时,它内的this
将成为_.bind
的第二个参数(而不是window
,这是通常的情况。)
答案 1 :(得分:2)
可能的解决方案
(function IcallTheShoots(){
console.log('am I?'); // any way you able communicate with server
window.setTimeout(IcallTheShoots, 1500);
})();
为什么setTimeout
代替setInterval
,因为它确保只有在当前完成时才会调用下一个循环