У меня есть серия вызовов ajax, которые заполняют столбцы на странице.
var doneDefers = function(defer) {
// leftColDefer is another deferred that sets some header info
$.when(defer, leftColDefer).done(function(req1, req2){
var data = req1[0],
head = req2[0];
// spit this data out to elements on the page
});
};
for(i=0;i<window.ids.length;i++){
defer[i] = $.ajax({
url: 'api/get_runs_stats.php',
type: 'GET',
dataType: 'json',
data: {
run_id: window.ids[i]
}
});
doneDefers(defer[i]);
}
Это прекрасно работает. Если вызов ajax терпит неудачу, ничего не выплевывается, и с миром все в порядке. Теперь я хочу сделать некоторые расчеты на основе всех данных, которые выплевываются.
$.when.apply(null, defer)
.done(function() {
var args = Array.prototype.slice.call(arguments);
calcDeltas();
})
.fail(function() {
var args = Array.prototype.slice.call(arguments);
console.log('in list fail');
});
Готовая функция работает нормально, ни один из вызовов ajax не терпит неудачу. Если один из них терпит неудачу, я перехожу к функции сбоя, и у меня нет доступа ни к каким возвращаемым данным из других прогонов. Массив аргументов содержит только данные неудачного вызова.
Я хотел бы сделать свои расчеты на переданных наборах данных. Как я могу получить данные от хороших вызовов, когда один из них не работает?
$.when()
немедленно запускает обработчик (обработчики) сбоя, не дожидаясь, пока другие аргументы промиса будут разрешены или завершатся ошибкой.$.when()
не пытается сделать доступным для своего обработчика (ов) сбоев то, что не гарантируется, что это то, о чем вы, кажется, просите. - person Beetroot-Beetroot   schedule 23.01.2014