Promise 在 Node.JS REST API 服务器中不返回值

问题描述 投票:0回答:1

我正在使用 MariaDB 连接器在 Node.js 中创建 REST API。由于 MariaDB 连接器必须返回一个承诺,我正在尝试从所述承诺中检索值,但我似乎遗漏了一些东西,因为它没有将值一直返回到我需要的地方。

在我的主文件中,我有这条路线:

const userController = new UserController();

app.get("/users", (req, res) => {
    console.log("Getting user list");
    userController.getAllUsers(res);
});

在 UserController 中,我有这段代码,它调用一个单独的 dbService 来运行查询:

public getAllUsers(res: any) {
    let query = "SELECT * FROM USERS";
    console.log("Running select query: " + query);
    this.dbService.runSelectQuery(query).then((r) => 
    {
        console.log("UserController result: " + r);
        res.send(r);
    });
}

最后,我在 dbService 类中有 runSelectQuery 方法,该方法调用 MariaDB 连接器来创建连接、运行查询并处理结果:

public async runSelectQuery(query: string) {
    let conn;
    let result;
    try {
        conn = await this.pool.getConnection();
        await conn.query(query).then((r) => {
            console.log("dbService result: " + r);
            result = r;
        });
        return result;
    } catch (err) {
        throw err;
    } finally {
        if (conn) return conn.end();
    }
}

问题是,当我向此路由发出请求时,dbService 方法会看到来自 MariaDB 连接器的有效结果,然后尝试将该结果返回给 UserController 类(由于该函数是异步的,该类被包装在 Promise 本身中) )。然而,UserController 将从 dbService 返回的 Promise 值视为未定义。

Getting user list
Running select query: SELECT * FROM USERS
dbService result: [object Object]
UserController result: undefined

为了正确地将值从 dbService Promise 传递到 UserController,以便我可以在 REST 响应中将其发送回,是否缺少某些内容?

node.js typescript express mariadb es6-promise
1个回答
0
投票

finally
子句中返回的值会覆盖之前返回的
result

function a() {
  try {
    return 1;
  } finally {
    return 2;
  }
}
console.log(a());

这会记录“2”,而不是“1”。

© www.soinside.com 2019 - 2024. All rights reserved.