乍一看,您似乎可以将jqXHR对象从jquery转换为ES6 Promise。但是,如果请求失败,则错误处理程序进入无限循环,因为传递给catch / error回调的参数是jqXHR本身,因此Promise被拒绝,并且拒绝自身,导致无限循环。
将jqXHR转换为Promise而不会导致错误无限循环的最佳方法是什么?
我想到的两个可能的解决方案是以某种方式获取原始XMLHttpRequest并在失败时拒绝承诺,或者在没有then方法的情况下将jqXHR包装在另一个对象中。
这两个看起来都很尴尬吗?是否有一种方法可以通过跟随函数对其解析/拒绝的值进行压缩?或者不太理想,一种从jqXHR获取原始XMLHttpRequest的方法?
答案 0 :(得分:0)
如何用保证包裹$.ajax
电话?
类似的东西:
var request = new Promise(function(resolve, reject) {
$.ajax({
url: '...',
data: { ... },
method: 'POST',
success: function(response) {
resolve(response);
},
error: function(jqXHR, textStatus, errorThrown) {
reject(errorThrown);
}
});
});
request.then(...).catch(...);