JS Promise中的then()永远不会被执行

时间:2018-05-30 06:10:47

标签: javascript promise

有一个函数返回一个承诺:

req.postP = function () {

    var $promise = $.ajax({
        url: self._url(url),
        type: "POST",
        data: JSON.stringify(data),
        headers: headers,
        contentType: self.JSON_CONTENT_TYPE,
        dataType: "json"
    });

    return new Promise( (resolve, reject) => {
        return $promise.then(resolve, reject);
    } );

}

另一个调用第一个函数的函数:

req
    .postP(POST_REGISTER, userData)
    .then((data) => {
        // is never ecexuted
    }) 
    .catch((err) => {
        console.log(typeof err.then === "function"); // true
    });

永远不会执行then()函数。

似乎承诺在catch函数内部为err,因为err.then是一个函数。

req.postP()函数也被其他函数调用,并适用于这些情况。

1 个答案:

答案 0 :(得分:0)

铸造标准承诺,不是问题。

问题是dataType。根据{{​​3}}:

  

您期望从服务器返回的数据类型。

由于服务器在成功时没有为此请求返回任何数据 - 但是jQuery预期的数据 - 承诺总是被拒绝。

相关: jQuery docs