Я использую jQuery для AJAX, но Q в другом месте нашего приложения, поэтому хочу убедиться, что реализация Promise непротиворечива.
Я обернул вызов jQuery AJAX с Q следующим образом:
Q($.ajax(url, {
type: 'get'
}));
И это отлично работает для успешных ответов. Теперь я хочу добавить обработку ошибок, я хочу иметь глобальную обработку ошибок (поскольку у нас есть согласованный ответ об ошибке с нашего сервера), сделав API следующим образом:
var xhr = function (url) {
return Q($.ajax(url, {
type: 'get'
}))
.then(function (data) {
return data;
}, function (res) {
//global error handling
});
};
И я ожидаю использовать его так:
xhr('...').then(function () { console.log('success'); });
Проблема заключается в том, что когда глобальный обработчик ошибок запускает метод "success" для потребителя метода xhr
, вызывается.
Как бы вы это предотвратили?
Готовый образец можно увидеть здесь — http://jsbin.com/gudifu/3/edit.