【问题标题】:then() in JS Promise is never executed [duplicate]JS Promise 中的 then() 永远不会执行 [重复]
【发布时间】:2018-11-08 21:09:53
【问题描述】:

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

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() 函数永远不会执行。

由于err.then 是一个函数,因此该promise 似乎在catch 函数中,为err

req.postP() 函数也被其他函数调用并在这些情况下工作。

【问题讨论】:

  • return new Promise( (resolve, reject) => {...} ); ...无论... 是什么,你都知道resolve 吗?
  • 如果catch 块运行,则必须调用reject 而不是resolve
  • 或者... 中抛出了一个错误——这将与调用reject 的结果相同......没有看到相关代码,这肯定是个谜
  • 需要得到你的承诺..
  • @JaromandaX 我添加了承诺。

标签: javascript promise


【解决方案1】:

转换为标准承诺不是问题。

问题是dataType。根据jQuery docs

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

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

相关: jQuery returning "parsererror" for ajax request

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2015-03-30
    相关资源
    最近更新 更多