【问题标题】:Array.push() is not working? [duplicate]Array.push() 不工作? [复制]
【发布时间】:2017-12-15 01:46:28
【问题描述】:

我有以下代码,其中在 mongoose 调用之外不知道 newUsers。 我必须返回 newUsers 列表。

挣扎了很久。但没有得到任何改进。

exports.list = function(req, res) {

      User.find({ 'roles': 'user' }, '-salt -password -providerData').sort('-created').populate('user', 'displayName').lean().exec(function(err, users) {
        if (err) {
          return res.status(422).send({
            message: errorHandler.getErrorMessage(err)
          });
        }
        var i;
        var newUsers = [];
        users.forEach(function(user) {
          Customer.find({ user: user._id }).exec(function(err, customers) {
            if (err) {
              return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
              });
            }
            user.customers = customers.length;
            newUsers.push(user);
            console.log(newUsers.length); // newUsers are known here
           return newUsers; **// does not workout**
          });
            console.log(newUsers.length); //newUsers are not known here
        });
      });
    };

【问题讨论】:

  • @ponury-kostek - 我是节点和角度的新手。我会努力理解
  • 在尝试帮助他人之前投反对票是没有用的
  • 我没有反对你的问题,只是标记为重复

标签: javascript node.js mongoose


【解决方案1】:
exports.list = function (req, res) {
    User.find({ 'roles': 'user' }, '-salt -password -providerData').sort('-created').populate('user', 'displayName').lean().exec(function (err, users) {
        if (err) {
            return res.status(422).send({
                message: errorHandler.getErrorMessage(err)
            });
        }
        var i;
        var newUsers = [];
        users.forEach(function (user) {
            Customer.find({ user: user._id }).exec(function (err, customers) {
                if (err) {
                    return res.status(400).send({
                        message: errorHandler.getErrorMessage(err)
                    });
                }
                user.customers = customers.length;
                newUsers.push(user);
                console.log(newUsers.length, newUsers);
            });
        });
    });
};

你需要了解异步编程

【讨论】:

    【解决方案2】:

    您将返回forEach() 内部,我认为您应该返回forEach() 外部以获得更好的结果。

    请试试下面的代码,希望它对你有用:

    exports.list = function (req, res) {
        User.find({ 'roles': 'user' }, '-salt -password -providerData').sort('-created').populate('user', 'displayName').lean().exec(function (err, users) {
            if (err) {
                return res.status(422).send({
                    message: errorHandler.getErrorMessage(err)
                });
            }
            var i;
            var newUsers = [];
            users.forEach(function (user) {
                Customer.find({ user: user._id }).exec(function (err, customers) {
                    if (err) {
                        return res.status(400).send({
                            message: errorHandler.getErrorMessage(err)
                        });
                    }
                    user.customers = customers.length;
                    newUsers.push(user);
                });
            });
            console.log(newUsers.length);
            return newUsers;
        });
    };
    

    【讨论】:

    • 还是不行。这个我已经试过了
    • 您要推送 newUsers.push(user) 还是 newUsers.push(customers) ?我想你想做 newUsers.push(customers)。
    • 没有。我想在用户本身中吸引客户
    • 在 "Customer.find({ user: user._id }).exec(function (err, customers) {" 行之前添加 "user.toJSON()"。
    猜你喜欢
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多