在Mongoose中使用Express的两个数据库查询

有很多情况下,我必须做两个数据库查询相互依赖..但由于js的asynchronous性质,我不能设置这些查询请求的顺序。 我一直在使用的工作是将其中一个查询放在另一个的callback中。 我的方法似乎是工作,但我只想知道是否有更好的方法来做到这一点?

示例代码:

app.get('/tweet', function(req,res){ User.findOne({ twitterID: req.user.id }, function(err, user) { if (user){ var votedPosts = user.votedPosts; Post.find(function (err, posts) { if(posts){ for (var i = 0; i < posts.length; i++){ for (var j = 0; j < votedPosts.length; j++){ if(votedPosts[j]._id == posts[i]._id){ posts[i].votetype = votedPosts[j].votetype; } else{ console.log("this is getting called"); posts[i].votetype = 0; } } } res.send(posts); } }); } }); }); 

是的,有许多stream控制库来解决深度嵌套的callback问题。 我推荐asynchronous或灵活 ,但承诺是解决这个问题的另一种stream行模式。

添加代码的基本过程随着时间的推移而变得越来越深:

  • 用less量代码处理1或2个嵌套层次。 它没有那么坏。
  • 将事物提取到顶级命名函数并调用它们(大多数node.js核心代码尝试不超越这一点)
  • 使用库(自定义API或基于承诺模式)

节点wiki上有一长串stream量控制模块 。 你也可以search npm