异步函数返回未定义,但console.log可以正常工作

时间:2020-09-30 02:41:52

标签: javascript node.js

我正在尝试使用sequelize从phpmyadmin中的数据库中获取一些信息,但是当我尝试返回值时,我得到了“未定义”。如果我尝试console.log数据,它似乎很好。我真的不明白问题出在哪里。

更新:我已经尝试使用await getTweetInfo(),但是收到一条错误消息,提示“ await仅在异步函数中有效”。我需要该查询为另一个函数返回的字符串。


async function getTweetInfo(){
    const data = await sequelize.query('SELECT contenido FROM tweets WHERE id = ?',
    {replacements: [2], type:sequelize.QueryTypes.SELECT})
    return data
}

getTweetInfo()

3 个答案:

答案 0 :(得分:2)

async function getTweetInfo(){
    const data = await sequelize.query('SELECT contenido FROM tweets WHERE id = ?',
    {replacements: [2], type:sequelize.QueryTypes.SELECT})
    return data
}

console.log(await getTweetInfo());

[更新] 我以为这很明显,但让我考虑一下。

  1. 函数 getTweetInfo 返回一个Promise,一旦从数据库返回数据,该Promise将得到解决
  2. 因此,在调用该函数以消耗数据时,应使用 await

我给出的示例正在等待函数结果并将其显示在console.log()

答案 1 :(得分:2)

getTweetInfo返回一个承诺。

尝试:

getTweetInfo().then(data => console.log(data))

或使用await

await getTweetInfo()

答案 2 :(得分:0)

获得结果的原因是将console.log(data)放在await之后。它将等待查询,直到完成为止,然后在您的console.log(data)旁边。这就是为什么您得到结果。

async function getTweetInfo(){
    return sequelize.query('SELECT contenido FROM tweets WHERE id = ?',
    {replacements: [2], type:sequelize.QueryTypes.SELECT})
}

var data = await getTweetInfo()
console.log(data)