【发布时间】:2020-07-27 21:36:21
【问题描述】:
我正在尝试遍历一系列日期以返回每个日期的热门歌曲。所以我有一个 for 循环。在这个 for 循环中,调用了一个函数来查看我的数据库中的热门歌曲。因此,我将它包装在一个承诺中,以便它能够支撑 for 循环,但这种方法似乎也不起作用。有人可以解释一个更好的方法来解决这个问题。
app.post('/getDate', function (req, res) {
this.tracks = [];
let until = new Date(req.body.dateToOutput);
for (var d = new Date(req.body.dateFromOutput); d <= until; d.setDate(d.getDate() + 1)) {
date = d.toLocaleDateString('en-US', { timeZone: 'UTC' });
console.log('date', date);
new Promise(function (resolve, reject) {
getDate(date).then(() => {
resolve();
})
});
}
console.log(this.tracks);
});
function getDate(date) {
return new Promise(function (resolve, reject) {
Track.find({ Date: date }, function (err, track) {
if (!err) {
console.log(track);
this.tracks.push(track);
resolve();
}
else {
reject();
}
}).sort({ Streams: -1 }).limit(1);
});
}
【问题讨论】:
-
我认为您的问题已经得到解答,请查看:stackoverflow.com/questions/40328932/…
-
另外你正在使用一个非常奇怪的 for 循环,它可能会中断或抛出一堆错误,为什么不使用数值?,我认为如果你不修复循环,我的答案将不起作用.
-
啊,我忘记了另一件事,在您的 getDate 函数中,您有 .sort({Streams: -1}).limit(1),它永远不会反映在您的代码中,因为在Track.find 方法被执行,但我怀疑你的 Track.find 方法的返回总是未定义的,如果不是未定义的,你将它应用于不会在承诺中返回的东西,所以你正在做的操作不会反映在你的承诺中,就像创建一个变量而不使用它。
标签: javascript express mongoose promise