在我得到数据后,如何使这个变量执行



我不知道问题出在哪里,所以我知道标题没有描述我对此的任何看法。这就是我面临的问题。我目前在一个MERN应用程序中工作。

我在express中有一个路由,我从两个表的数据库中请求一些数据。

playlist.post("/getplaylistSongs", (req, res) => {
const { cookie } = req.body;
const sql = "SELECT * FROM playlist WHERE user_id = ?";
dbCon.query(sql, [cookie], (err, result) => {
if (err) {
res.status(400).json({
message: "failed to get playlist details ",
});
} else {
let playlistSongs = [];
result.forEach((element, index) => {
const audio_id = element.audio_id;
dbCon.query(
"SELECT * FROM audios where video_id = ?",
[audio_id],
(err, song) => {
if (err) {
res.status(400).json({
message: "failed to get music",
});
} else {
playlistSongs.push(song);
}
});
});
console.log(playlistSongs); 
res.status(200).json({
playlist: playlistSongs,
});
}
});
});

但这里的问题是,无论我如何尝试,我总是将playlistSongs作为空数组。非常感谢。评论以纠正问题。

EDIT:现在我知道问题是由javascript的执行引起的。

试用async / await:

playlist.post('/getplaylistSongs', async (req, res) => {
const { cookie } = req.body;
const sql = 'SELECT * FROM playlist WHERE user_id = ?';
try {
const result = await dbCon.query(sql, [cookie]);
let playlistSongs = [];
result.forEach(async (element, index) => {
const audio_id = element.audio_id;
const song = await dbCon.query(
'SELECT * FROM audios where video_id = ?',
[audio_id]
);
playlistSongs.push(song);
});
console.log(playlistSongs);
res.status(200).json({
playlist: playlistSongs,
});
} catch (e) {
res.status(400).json({
message: 'failed to get playlist details ',
});
}
});

最新更新