【发布时间】:2016-08-16 12:58:43
【问题描述】:
我目前正在尝试做的是显示所有包含歌曲的播放列表。为此,我首先找到每个播放列表,然后执行 for 循环遍历所有播放列表(同时我初始化 globalArr 并输入值,然后它将作为 json 发送,因为它是一个 API),问题是当我这样做时循环中的另一个查找(PlaylistSong.find 或 Song.find)很好,因为它是异步的,当 for 结束时将进行查找,我将有 0 个结果,因为当他将采用 increment 的值时在他的最大。我听说过async,我什至用谷歌搜索过,但我真的不明白如何执行这段代码,因为它是 for 循环和异步查询的组合......
感谢您的帮助。
router.get('/', function(req, res, next) {
Playlist.find(function (err, playlists) {
if (err) return next(err);
/* Loop through every playlists */
var globalArr = [];
for (var increment = 0; increment < playlists.length; ++increment)
{
globalArr[increment] = [];
globalArr[increment]["name"] = playlists[increment].name;
/* Loop through every links between Songs and Playlist */
PlaylistSong.find({idPlaylist: playlists[increment]._id}, function (err, songs) {
if (err) return next(err);
for (var songIncrement = 0; songIncrement < songs.length; ++songIncrement) {
{
console.log("increment"+increment);
globalArr[increment][songIncrement] = [];
/* Getting the actual song by his ID */
Song.find({_id: song.idSong}, function (err, song) {
if (err) return next(err);
globalArr[increment][songIncrement]["name"] = songs[songIncrement].name;
globalArr[increment][songIncrement]["artist"] = songs[songIncrement].artist;
globalArr[increment][songIncrement]["picture"] = songs[songIncrement].picture;
globalArr[increment][songIncrement]["price"] = songs[songIncrement].price;
globalArr[increment][songIncrement]["file"] = songs[songIncrement].file;
globalArr[increment][songIncrement]["difficulty"] = songs[songIncrement].difficulty;
globalArr[increment][songIncrement]["downloaded"] = songs[songIncrement].downloaded;
});
}
}});
}
res.contentType('application/json');
res.send(JSON.stringify(globalArr));
});
});
【问题讨论】:
标签: node.js mongodb asynchronous mongoose