Выдача ошибки в объекте Deferred jQuery

У меня есть промис$.ajaxи я хочу проверить, содержит ли мой (синтаксически верный) ответ ошибку, вызывающую в этом случае статус отклонения .

Я работал со своей собственной библиотекой промисов, которая легко справляется с такими задачами. Мне не очень нравится jQuery-реализация Promise(cache) с ееDeferredobjectи, возможно, я что-то упустил из виду, потому что редко ею пользуюсь. Я думаю, что нужно просто использовать .then(), что кажется довольно сложным:

return $.ajax(...).then(function success(response) {
    var problem = hasError(response);
    if (problem) {
        var error = new $.Deferred;
        error.reject(problem);
        return error;
    } else
        return response;
});

Это должно возвращать обещание, которое отклоняется в случае сетевых ошибок или проблем с ответом. Но действительно ли возврат отклоненного отложенного [единственный|лучший|кратчайший] путь?

Я также был бы признателен за помощь в том, как бороться с такими «обработчиками ответов, выдающими ошибки» в самих опциях ajax, я не смог найти хорошую документацию по ним.


Отказ от ответственности: нет, я не могу изменить ответы сервера. Метод обнаружения проблем является синхронным. Я не хочу использовать другие библиотеки, меня особенно интересует, как это решает jQuery.

11
задан Bergi 1 June 2012 в 07:16
поделиться