从 Knex 接收值时推送到数组
pushing to array when recieving value from Knex
我正在构建一个类似 Twitter 的应用程序。我的节点服务器使用 knex 从 sql 数据库检索数据。
我在应该获得 posts 的端点处的代码有问题('emails' 是一个数组):
app.post('/posts', (req, res) => {
const { emails } = req.body;
let arr = [];
emails.forEach(email => {
db('*')
.from('posts')
.where('email', '=', email)
.then(result => {
arr.push(result)
})
})
res.json(arr)
})
当我在 promise 中控制台记录 'result' 时,我得到了所需的 post,但我在响应中得到了一个空数组。
我假设这个问题与它是一个承诺的事实有关?
我试图以某种方式将它变成一个异步函数,但没有成功。
每个 db
调用 return 一个承诺,您目前忽略了。因为您没有等待他们,所以您的 res.json
调用会在 arr.push
调用之前运行。
- 我把
forEach
改成了map
- 我 return 从
db
调用中编辑了承诺,所以现在我有一系列承诺。
- 我用
Promise.all
等待所有这些承诺
- 它的
then
将在数组中获取所有这些承诺的结果,因此不再需要 arr
数组。
- 然后我可以发送响应。
代码:
Promise.all(
emails.map(
email => db("*").from("posts").where("email", "=", email)
)
).then(results => {
res.json(results);
});
我正在构建一个类似 Twitter 的应用程序。我的节点服务器使用 knex 从 sql 数据库检索数据。 我在应该获得 posts 的端点处的代码有问题('emails' 是一个数组):
app.post('/posts', (req, res) => {
const { emails } = req.body;
let arr = [];
emails.forEach(email => {
db('*')
.from('posts')
.where('email', '=', email)
.then(result => {
arr.push(result)
})
})
res.json(arr)
})
当我在 promise 中控制台记录 'result' 时,我得到了所需的 post,但我在响应中得到了一个空数组。 我假设这个问题与它是一个承诺的事实有关? 我试图以某种方式将它变成一个异步函数,但没有成功。
每个 db
调用 return 一个承诺,您目前忽略了。因为您没有等待他们,所以您的 res.json
调用会在 arr.push
调用之前运行。
- 我把
forEach
改成了map
- 我 return 从
db
调用中编辑了承诺,所以现在我有一系列承诺。 - 我用
Promise.all
等待所有这些承诺
- 它的
then
将在数组中获取所有这些承诺的结果,因此不再需要arr
数组。 - 然后我可以发送响应。
代码:
Promise.all(
emails.map(
email => db("*").from("posts").where("email", "=", email)
)
).then(results => {
res.json(results);
});