我如何得到承诺被拒绝的真正原因

时间:2017-06-09 05:50:36

标签: jquery es6-promise

我有这段代码

var loadFilePromise = new Promise(function(loadFilePromiseResolve, loadFilePromiseReject) {

    $.ajax({
        type: 'post',
        url: "http://localhost:12343/MyTestPage.aspx",
        data: {
            DocumentFileID: documentFileId
        },
        dataType: 'json'
    }).then(function(resp) {
        // Do something here
        loadFilePromiseResolve();
    }, function(xhr) {
        // This is reject response from ajax. And it hits here.
        var msg = "Error occurred: " + xhr.statusText + " (" + xhr.status + ")\n" + Util.parseAspxExceptionMessage(xhr.responseText);
        loadFilePromiseReject(msg);
    });

});

我想知道为什么承诺被拒绝了。我查看了xhr对象内部,但没有。关于这一点的奇怪之处在于状态为200statusText = OK

需要帮助,因为我在ES6中还没有太多的知识。

2 个答案:

答案 0 :(得分:2)

请参阅jQuery documentation on ajax

jqXHR.then(
    function( data, textStatus, jqXHR ) {},
    function( jqXHR, textStatus, errorThrown ) {}
);
     

包含.done()和.fail()方法的功能,允许(从jQuery 1.8开始)操作底层的Promise。有关实现细节,请参阅deferred.then()。

错误回调的签名是function(jqXHR, textStatus, errorThrown),因此您可以使用textStatuserrorThrown获取有关确切问题的更多信息。

答案 1 :(得分:1)

您应该将失败函数的签名更改为

function( jqXHR, textStatus, errorThrown )

然后检查最后2个参数的值。