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 实现定义超时的主要内容,如果未能解决你的问题,请参考以下文章