我只是新加入节点,并以async.js结尾。我不确定我想做的事是否可行(猜测是可行的),或者我的工作方法是否正确(猜测并非可行)。这是东西:
这段代码是用来管理一些instagram数据的,所以我将根据代码实际需要做的事情来解释所有内容,以使其更加易懂。
连接到mongoDB,获取一些Instagram帐户ID(完成)
对于每个ID,我想获得las 10个帖子(我已经将其保存在数据库中)。
对于每个帐户的那10个项目,我需要获取(评论+喜欢)的总和,并将该值计入第一个eachSeries调用的out代码中。
router.get('/users_all', function(req, res) {
User.find().sort({'counts.followed_by': 'descending'}).exec(function(err, users) {
async.eachSeries(users, function(item, outerCallback) {
Media.find({'userId': item.user_id}).exec(function(err, medias) {
var count = 0;
async.eachSeries(medias, function(item, outerCallback2) {
count += item.comments_count + item.likes_count;
});
});
item.totalAmount = count;
});
res.json(users);
});
}
我只是没有设置每个eachSeries中的回调调用,因为我不知道将它们放在哪里,而且我认为我的代码更容易理解。
如果需要有关代码的更多说明,请询问。谢谢你的帮助。
因此,您几乎就在那儿(至少使用回调)。
如果您在https://github.com/caolan/async上查看有关异步的文档,您会看到对的调用eachSeries
也有回调,因此一旦完成该系列,您就可以执行一些操作。
内序列完成添加所有要计数的值后,看起来您的代码正在尝试完成。因此您的async.eachSeries调用最终将看起来像这样(加上一些我肯定会为您的mongo查询推荐的其他错误处理)。
router.get('/users_all', function(req, res) {
User.find().sort({'counts.followed_by': 'descending'}).exec(function(err, users) {
if (err) {
res.status(500).json({code: 500, message: 'Internal server error'});
} else {
async.eachSeries(users, function (item, outerCallback) {
Media.find({'userId': item.user_id}).exec(function (err, medias) {
if (err) {
outerCallback(err);
} else {
var count = 0;
async.eachSeries(medias, function (item, innerCallback) {
count += item.comments_count + item.likes_count;
innerCallback();
}, function () {
if (err) {
outerCallback(err);
} else {
item.totalAmount = count;
outerCallback();
}
});
}
});
}, function () {
res.json(users);
});
}
});
});
问题在于,看起来您实际上并没有将自己限制在最近的10个项目中,除非您已将它们保存在数据库中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句