【问题标题】:Issue with push and mongoose results推送和猫鼬结果的问题
【发布时间】:2013-01-08 01:53:22
【问题描述】:

这是代码:

usermodel.findOne({ user: req.session.user }, function (err, usr){

 following = [];

 for (var i = 0; i < usr.follow.length; i++) {

    usermodel.findOne({ _id: usr.follow[i] }, function (err, followed){

        if (err) throw err;

        following.push(followed);

    });

  }

    if (err) throw err;

    console.log(following);

      res.render('home.ejs', {

         user: usr,
         following: following 

      }); 

});

我正在尝试将所有 usermodel.find 推送到以下数组中。在循环for 内,如果我使用console.log(following),控制台会显示包含所有猫鼬findresults 的数组,但问题是,在forloop 之外,数组following 是空的!这很奇怪,我不知道该怎么做。任何解决方案...?

感谢您的提前!

【问题讨论】:

  • 这看起来像一个异步机制。这通常是 API 涉及此类回调函数的原因 - 回调不会立即调用,而是在将来的某个时间调用。因此,循环之后的代码会在任何回调开始之前运行。

标签: javascript node.js mongoose


【解决方案1】:

问题是您正在调用异步函数,这些函数将在未来某个时间执行,但您希望 following 包含当前的项目。

您的应用程序应该像这样重组:

usermodel.findOne({ user: req.session.user }, function (err, usr){
following = [];
// i assume that usr.follow is an array
usermodel.find({ _id: { $in: usr.follow } }, function (err, userList){
    if (err) throw err;
    console.log(userList);
    res.render('home.ejs', {
        user: usr,
        following: userList
    });
});

【讨论】:

猜你喜欢
  • 2017-10-03
  • 2022-12-22
  • 2019-10-13
  • 1970-01-01
  • 2015-05-05
  • 2016-02-04
  • 2018-09-30
  • 1970-01-01
  • 2018-08-22
相关资源
最近更新 更多