【问题标题】:Making the mongoose queries in series in synchronous way [duplicate]以同步方式进行系列猫鼬查询[重复]
【发布时间】:2018-04-10 08:49:18
【问题描述】:

我有一个执行三个 mongooose 命令的函数。 1. 查找所有合作伙伴的列表。 2. 查找所有用户的列表。 3. 更新用户表。

问题:Mongoose 异步执行它并执行其他命令。如何让它在系列 1、2、3 中执行,然后执行其他命令。下面,我附上了代码sn-p。

问题在于它异步运行三个 mongoose 命令并调用 redirect()。

router.post('/login', function(req, res, next) {
  Partner.findOne({'groupName': req.session.user.groupnName}), function(error, data) {
    var partnerInfo = data;
    if(partnerInfo && req.session.user)  {
      req.session.user.accountID = partnerInfo.accountID;
      req.session.user.iamRole = partnerInfo.iamRole;
    } 
  };
var id;
 User.find({'username': req.session.user.username}, function(err, data) {
    if(data)  {
      id = data._id;
     } 
  });

User.findByIdAndUpdate(id, req.session.user, function(error) {});
return res.redirect('/home');
});

【问题讨论】:

标签: node.js mongodb express asynchronous mongoose


【解决方案1】:

您应该将调用嵌套在回调中。

func1(args, function(){
    // do something here
    func2(someMoreArgs, function(){
        // do something more here
        func3(andMore, function(){

        })
    })
})

如果要避免嵌套回调,请使用 mongo-client 或 mongoose 的 promise 接口

【讨论】:

  • 哦,请不要。不是飞V!
  • @NeilLunn 即使我会避免嵌套回调。解决方案是改用 Promises。
  • 那你自己不做就不要发这种渣滓了。当有一个excellent resource 来解释使用各种可用方法返回和传递值时,就没有必要了。您不认为肯定比“嵌套回调”更有帮助吗? (反问 - 所以不要回答,只是想想)。
  • @NeilLunn 这就是为什么我建议在答案末尾使用 Promises 的原因。如果从性能的角度考虑,回调比 Promises 更快
猜你喜欢
  • 2023-04-08
  • 2019-08-07
  • 2018-02-05
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 2016-11-21
  • 2015-12-12
  • 2017-05-31
相关资源
最近更新 更多