使用.then()查询后,Sequelize无法分配数据

时间:2018-12-03 18:32:40

标签: javascript node.js sequelize.js

我具有此功能,但无法将其放入我的item变量中。如何将其放在item变量之外?

function getItems(id) {
    let item;

    sequelize.query("SELECT * FROM table WHERE id = " + id, {type: Sequelize.QueryTypes.SELECT})
    .then(myTableRows => {
        // item = JSON.stringify(myTableRows);
    });

    return item;
}

1 个答案:

答案 0 :(得分:0)

您的续集查询返回一个Promise,您不能在Promise中设置项目的值并期望立即得到响应。如果您希望它以这种方式工作,则需要正确处理Promise,或使用async-await。您可以将函数重新配置为如下所示,这将解决该问题:

async function getItems(id) {
   let item;

   item = await sequelize.query("SELECT * FROM table WHERE id = " + id, {type: Sequelize.QueryTypes.SELECT});

   return item;
}

================================================ ==========================

更新:

我不确定您在节点方面的经验水平,但是在节点杠杆方面有很多承诺。在较高的级别上,这意味着执行一些操作,然后在完成后执行一些操作。使用sequelize,您可以执行SQL查询,获得响应后,现在就可以对该数据进行处理。

Async-Await是一种使诺言在理解上更加直接的方法,但其作用相同。在线上有很多文章可以帮助您更好地理解这些概念。

现在,正在调用getItems的函数也必须是async-await,或者将其作为promise调用才能真正获取值。例如:

async function test(id) {
  let items = await getItems(id);
  console.log(items)

}

希望这可以消除一些困惑,但是如果您不清楚诺言如何运作,您可能还需要更多地了解诺言。希望这会有所帮助。