Не похоже, что я могу вернуть отложенный объект, если он не удался. У меня есть довольно вложенный запрос ajax, который входит в очередь, поэтому мне нужен способ вернуть запрос в качестве отложенного объекта. Все отлично, если запрос успешный, но я застрял на сбоях в распространении.Возврат отложенного объекта как сбой
https://jsfiddle.net/3wtady9r/
function doAjax(file) {
var defer = $.Deferred();
var fakeFile = file;
var data = null;
ajax();
function ajax() {
return $.get(fakeFile)
.done(function(data) {
data = data;
defer.resolve(data);
})
.fail(function() {
defer.fail();
})
}
return defer.promise(data);
}
var thisWillWork = '';
doAjax(thisWillWork)
.done(function() {
console.log('done')
})
.fail(function() {
console.error('fail')
})
.always(function() {
console.log('always')
})
var thisWontWork = 'fakeFile.html'
doAjax(thisWontWork)
.done(function() {
console.log('done')
})
.fail(function() {
console.error('fail')
})
.always(function() {
console.log('always')
})
Когда я doAjax (thisWontWork) Я ожидаю, чтобы получить ошибку консоли, а также .always, но ни огня.
Некоторые странные вещи. Вы вызываете 'ajax()' и игнорируете возвращаемое значение. У вас есть 'data = data;', но это только присваивается параметру, а не 'var data = null', поэтому' defer.promise (data) 'все еще передается' null' –
Это выглядит как ужасно неудачная попытка для выполнения [отложенного антипаттерна] (http://stackoverflow.com/q/23803743/1048572) для меня. Не делай этого. – Bergi