Promise返回未定义,之后的数据

时间:2019-03-18 12:06:25

标签: node.js typescript sqlite es6-promise

由于某些原因,我使用以下代码在实际数据之前未定义

async findOne(query: string, parameters: string): Promise<T> {
    const stmt: sqlite3.Statement = await this.db.prepare(query)
    const info: T = stmt.get(parameters)
    this.db.close()

    return info
}

const user = await respository.findOne('SELECT * FROM users WHERE id = ?', targetUser.id)
console.log(user)

控制台日志输出未定义的对象和之后的对象,这是什么原因?

1 个答案:

答案 0 :(得分:1)

可能您还需要在这里await

const info: T = await stmt.get(parameters);

从文档here看来,.get是一个经典的回调函数,因此您可能需要在将其与await结合使用之前将其包装在Promise中。

this.db.prepare(query)可能也是如此吗?如果您不想兑现承诺,请从标准节点库中检出util.promisify

此外,您不能在开放代码中调用异步函数。试试这个:

(async () => {
   const user = await respository.findOne('SELECT * FROM users WHERE id = ?', targetUser.id)
})();

希望这会有所帮助!