Backbone.js:为 Backbone.sync 实现定义超时

Posted

技术标签:

【中文标题】Backbone.js:为 Backbone.sync 实现定义超时【英文标题】:Backbone.js: define timeout for Backbone.sync implementation 【发布时间】:2013-01-18 17:23:37 【问题描述】:

我在我的一个项目中使用骨干网,集成了与外部 API 的通信。我想使用实时更新记录。由于我无法访问此外部应用程序的主后端,并且它们既不提供 websocket 服务器也不提供长轮询端点,因此我基本上可以选择使用 setInterval 和 50 秒的周期进行定期轮询.它一直运作良好。我的问题是边缘情况。如果由于某种原因 API 请求挂起超过 50 秒,比方说,我将立即触发一个新请求。这意味着,现在有 2 个挂起的请求,最终会加起来。有没有办法为请求设置超时?我知道所有请求都会导致 Backbone.sync,但我正在检查源代码,我没有看到任何可行的方法来设置 XmlHttpRequest 的超时。有没有办法干净地做到这一点而不覆盖行为?还是有其他解决方案/解决方法?

【问题讨论】:

“我知道所有请求都会导致 Backbone.sync” - 我认为这里更重要的事实是所有事件都会导致 $.ajax()!解决了很多关于主干网fetch()sync() 请求的问题。 【参考方案1】:

只需将options 参数中的timeout:milliseconds 选项传递给fetch。选项直接传递给jQuery.ajax,它处理低级 XHR 调用:

 collection.fetch(timeout:50000);

或者,您可以通过在应用启动时调用 jQuery.ajaxSetup 来为应用发出的所有请求设置全局超时:

$.ajaxSetup(timeout:50000);

【讨论】:

我明白了,所以还有一些选项可以传递给未记录的同步方法。顺便说一句,我还可以传递诸如 complete : functioname 之类的东西吗?如果我想实现长轮询。 你可以传递任何你想要的选项,没有验证。 Backbone 使用了其中的一些,向其中添加了一些,然后将其传递给 jQuery.ajax,它也被记录在案。您可以根据需要设置complete 处理程序。

以上是关于Backbone.js:为 Backbone.sync 实现定义超时的主要内容,如果未能解决你的问题,请参考以下文章

Backbone.js 和 Backbone 实现的最佳 URL 结构

Backbone.js + Handlebars 各

Backbone.js - 在哪里存储状态信息?

Backbone.js 本地存储,从服务器预先加载

Backbone.js 用于浏览器内页面布局编辑器?

如何使用 Backbone.js 生成模型 ID