jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jQuery Deferred:从完成过滤器中拒绝承诺大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Fyi,我刚刚@R_489_10691@jQuery的承诺,所以我可能在这里有点困惑

无论如何,我有一个AJAX请求,我想根据响应的内容从完成的过滤器中拒绝:

return doAJAXrequest().then(function (data) {
    if (data.responseText == "YES") {
        return doOtherAJAXrequest();
    } else {
        this.reject(data);
    }
});

那没有像我预期的那样工作

Uncaught TypeError: Object #<Object> has no method 'reject'

根据回应,我如何使这个承诺失败?那可能吗?或者我只是困惑在这里要做什么?

解决方法

在jQuery中(与其他一些libs不同),将“解决”状态的承诺转变为“被拒绝”状态是一个冗长的细节,需要明确地创建和拒绝新的Deferred。
function foo() {
    return doAJAXrequest().then(function (data,textStatus,jqXHR) {
        if (data.responseText == "YES") {
            return doOtherAJAXrequest(data);
        } else {
            return $.Deferred().reject(jqXHR,data,'Not YES').promise();
        }
    });
)

在这里,如果data.responseText!==“YES”在一定程度上模拟(一部分)失败的ajax请求,同时仍然允许数据传递,则返回。这对于下游的.fail()处理程序来说很重要,它必须处理两个真正的ajax失败和转换成功条件,而不用知道哪一个发生,直到它读取errorThrown。

foo().fail(function(jqXHR,errorThrown) {
    if(errorThrown == 'Not YES') {
        //transmogrified success
        var data = textStatus;
        ...
    }
    else {
        //genuine ajax failure
        ...
    }
});

以这种方式传递数据通常更容易,而不是从jqXHR对象重新获取数据。这对于JSON编码数据尤其如此,否则需要在失败处理程序中再次对其进行解码。

大佬总结

以上是大佬教程为你收集整理的jQuery Deferred:从完成过滤器中拒绝承诺全部内容,希望文章能够帮你解决jQuery Deferred:从完成过滤器中拒绝承诺所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。