BackboneJS не может перейти на.fail, когда таймаут вызова API
Я новичок в позвоночнике. Я нашел код, который добавляет Deferred, чтобы мы могли добавить обещание. Это код
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)}), ошибка будет работать, и я смогу увидеть ошибка в моей вкладке консоли.
Что случилось?
ОБНОВЛЕНИЕ, чтобы предотвратить проблемы, но не идеальный, я думаю. Исправлять это, потому что это отсутствует, не очень хорошая идея
this.item.getPatientInfo().done(_.bind(function() {
if (this.item.attributes.info !== undefined) {
this.renderPatient(this.item);
}
},this))
1 ответ
Backbone Model уже возвращает отложенную версию, я не вижу веской причины для этой слишком сложной реализации - лучше работать с Backbone, чем с ним. например
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'
события модель запускает для успеха и неудачи.