0

我试图让我的主干应用程序尽可能频繁地检查服务器以更新模型,类似于 twitter 的站点如何自动添加新的推文。

我当前的设置是通过他们的 api 检查外部应用程序,所以我无法访问他们的服务器,这让我不得不依赖客户端进行检查而不会太占用内存,我该如何实现呢?

4

2 回答 2

3

在 Javascript 中,你可以真正控制时间的唯一方法是通过 setTimeout/setInterval;没有“更复杂”的机制,除非您计算仅包装 setTimeout/setInterval 的辅助函数(例如“延迟”)。

所以,dmi3y 的回答是正确的。但是,由于您在标签和描述中都提到了 Backbone,所以这里有一个更类似于 Backbone 的版本......

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。

PS 万一你不熟悉_.bind,它来自下划线库,Backbone 依赖于它,所以你已经拥有它。它所做的只是固定this到位,因此当您的 timeout/interval 函数解析时,this它的内部将是第二个参数_.bind(而不是window,这通常是)。

于 2012-12-13T20:20:52.467 回答
2

可能的解决方案

(function IcallTheShoots(){
   console.log('am I?'); // any way you able communicate with server
   window.setTimeout(IcallTheShoots, 1500);
})();

为什么setTimeout而不是setInterval,因为它确保仅在当前完成时才调用下一个循环

于 2012-12-13T19:52:23.323 回答