gpt4 book ai didi

javascript - 同步执行 Sequelize 查询

转载 作者:数据小太阳 更新时间:2023-10-29 06:00:27 24 4
gpt4 key购买 nike

我正在使用 Node.js 和 Sequelize(带有 Postgres 后端)构建一个网站。我有一个返回许多带有外键的对象的查询,我想将外键引用的对象列表传递给 View 。

在示例中,Attendances 包含 Hackathon key ,我想返回一个 hackathons 列表。由于代码是异步的,所以下面的事情当然在 Node 中不起作用:

models.Attendance.findAll({
where: {
UserId: req.user.id
}
}).then(function (data) {
var hacks = [];
for (var d in data) {
models.Hackathon.findOne({
where: {
id: data[d].id
}
}).then(function (data1) {
hacks.append(data1);
});
}
res.render('dashboard/index.ejs', {title: 'My Hackathons', user: req.user, hacks: hacks});
});

有没有办法以同步方式执行该查询,这意味着我不会返回 View ,直到我拥有包含所有对象的“hacks”列表?

谢谢!

最佳答案

使用 Promise.all 执行所有查询,然后调用下一个函数。

models.Attendance.findAll({
where: {
UserId: req.user.id
}
}).then(function (data) {
// get an array of the data keys, (not sure if you need to do this)
// it is unclear whether data is an object of users or an array. I assume
// it's an object as you used a `for in` loop
const keys = Object.keys(data)
// map the data keys to [Promise(query), Promise(query), {...}]
const hacks = keys.map((d) => {
return models.Hackathon.findOne({
where: {
id: data[d].id
}
})
})
// user Promise.all to resolve all of the promises asynchronously
Promise.all(hacks)
// this will be called once all promises have resolved so
// you can modify your data. it will be an array of the returned values
.then((users) => {
const [user1, user2, {...}] = users
res.render('dashboard/index.ejs', {
title: 'My Hackathons',
user: req.user,
hacks: users
});
})
});

关于javascript - 同步执行 Sequelize 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com