我的成分数组有什么问题?得到一个空数组

What's wrong with my ingredients array ? Got an empty array

提问人:Rémi 提问时间:11/15/2023 更新时间:11/16/2023 访问量:32

问:

我目前正在开发一个烹饪应用程序,我在使用 API 时遇到了问题。

IngredientsController.get('/', async (req, res) => {
    let ingredients:Ingredient[] = []
    await pool.query({text:'SELECT * FROM Ingredients ORDER BY id'}, (error: Error, results: QueryResult) => {
        if (error) {
            throw(error);
        }
        for (let key in results.rows) {
            let ingredient:Ingredient = new Ingredient(Number(results.rows[key].id), results.rows[key].name);
            ingredients.push(ingredient);
        }
        res.status(200);
        res.json(ingredients);
    })
    console.log(ingredients)
    return res;
})

当我在浏览器上测试 API 时,我可以看到完整的成分列表。

我的问题是指令显示一个空数组。console.log(ingredients)

谁能告诉我我的控制器出了什么问题?

正如您在代码中看到的,我在代码中放置了一个 await 指令,但它仍然不起作用。 是因为我在查询函数中加载了数组吗?

节点 .js 打字稿 PostgreSQL Express PG

评论

0赞 derpirscher 11/15/2023
你混淆了回调和承诺...... 不返回承诺,因此无法等待pool.query(..., (error, result) => {...})
0赞 derpirscher 11/15/2023
这回答了你的问题吗?如何返回异步调用的响应?

答:

0赞 Wil Moore III 11/16/2023 #1

从以下内容更改您的:await

    await pool.query({text:'SELECT * FROM Ingredients ORDER BY id'}, (error: Error, results: QueryResult) => {
        if (error) {
            throw(error);
        }
        ...
    })

自:

try {
  const results = await pool.query('SELECT * FROM Ingredients ORDER BY id');
  console.log(results);
} catch (error) {
  console.error(error.message);
}

一旦你看到它工作;重新添加循环结构;不过,我可能会映射过来创建数组。results.rowsingredients