.then()返回一个promise而不是已解析的数据值

时间:2018-05-29 20:06:48

标签: javascript jquery ajax promise

以下ajax调用我正在使用承诺

function hit_db()
{
    return new Promise(function (resolve, reject)
    {
        $.ajax({
            url: target_url,
            type: "GET",
            async: true,
            crossDomain: true,
            success: function (data) { //<--Ultimately I want this snippet to return this data variable
                resolve(data);
            },
            error: function (err) {
                reject(error);
            }
        });
    });
}
return hit_db().then(data => {. // <--EDIT
   return data;
});

每当我尝试返回数据时,我都会得到obj Promise而不是应该说Great! Success!的服务器响应

我认为一旦承诺得到满足,我就可以返回服务器响应的数据。

我在这里谈论如何从我正在获得的异步响应中解包Promise对象

然后使用async / await语法stills返回一个obj Promise

function hit_db()
{
    return new Promise(function (resolve, reject)
    {
        $.ajax({
            url: target_url,
            type: "GET",
            async: true,
            crossDomain: true,
            success: function (data) {
                resolve(data);
            },
            error: function (err) {
                reject(error);
            }
        });
    });
}
async function handler() {
    try {
        var data = await hit_db();
        return data;
    }
    catch (error) {
        throw new Error('Network call failed');
    }
}
return handler();

旁注:我已经用我的ajax调用解决了任何可能的CORS问题

1 个答案:

答案 0 :(得分:0)

您将返回hit_db().then(...).then(...)的返回值是一个承诺。您想要达到的“取消”水平是不可能的。

正如Gustavo所说,这需要async / await。

使用promises,您可以进行链接以简化异步工作流程

hit_db()
  .then(...)
  .then(...)
  .then(...)
  .catch(...)
相关问题