当api呼叫超时

时间:2015-09-03 20:43:10

标签: javascript jquery backbone.js jquery-deferred

我是骨干新手。我找到了添加Deferred的代码,所以我们可以添加promise。这是代码

getPatientInfo: function fetch(options) {
   var deferred = $.Deferred();
   Backbone.Model.prototype.fetch.call(this, _.extend({ 
     deferred: deferred
     }, 
     options));
   return deferred;
 },

调用getItem函数的代码就是这个

  this.item.getPatientInfo().done(_.bind(function() {
    this.renderPatient(this.item);
  },this))
  .fail(function(error){
    // This won't show unlike native $.ajax .fail where it will show the error
    // Not sure why it's not working
    console.log(error);
  });

但是,当我尝试模拟关闭网络等故障时,.fail将无法捕获失败的GET请求。我不会执行console.log(错误);

但是如果我使用本机jquery更改它,比如使用$ .ajax()。success()。error(function(error){console.log(error)}),。error将会工作,我将能够在我的控制台选项卡中查看错误。

有什么问题?

更新以防止问题,但我认为不理想。修补它因为它缺失不是一个好主意

  this.item.getPatientInfo().done(_.bind(function() {
    if (this.item.attributes.info !== undefined) {
      this.renderPatient(this.item);
    }
  },this))

1 个答案:

答案 0 :(得分:2)

Backbone Model已经返回延迟,我认为这个过于复杂的实现没有充分的理由 - 使用Backbone比​​使用Backbone更好。 e.g。

var SomeModel = Backbone.Model.extend({
    url: 'http://jsonplaceholder.typicode.com/posts/1'
});

var someModel = new SomeModel();
someModel.fetch()
.done(function(response) {
    console.log('Post title: ', response.title);
    console.log('Post body: ', response.body);
})
.fail(function(jqXHR, textStatus, errorThrown) {
    console.log('failed');
});

小提琴:http://jsfiddle.net/ferahl/5zzzchpq/

请注意,您还可以访问done中的新属性,即someModel.get('title'),或者您可以使用模型触发的'sync''error'事件来代替那些延迟回调成功与失败。