Promise.resolve on jqXHR ajax导致无限循环

时间:2016-06-07 18:18:34

标签: javascript jquery es6-promise

乍一看,您似乎可以将jqXHR对象从jquery转换为ES6 Promise。但是,如果请求失败,则错误处理程序进入无限循环,因为传递给catch / error回调的参数是jqXHR本身,因此Promise被拒绝,并且拒绝自身,导致无限循环。

将jqXHR转换为Promise而不会导致错误无限循环的最佳方法是什么?

我想到的两个可能的解决方案是以某种方式获取原始XMLHttpRequest并在失败时拒绝承诺,或者在没有then方法的情况下将jqXHR包装在另一个对象中。

这两个看起来都很尴尬吗?是否有一种方法可以通过跟随函数对其解析/拒绝的值进行压缩?或者不太理想,一种从jqXHR获取原始XMLHttpRequest的方法?

1 个答案:

答案 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(...);