Array.push() 不工作? [复制]

Posted

技术标签:

【中文标题】Array.push() 不工作? [复制]【英文标题】:Array.push() is not working? [duplicate] 【发布时间】: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 - 我是节点和角度的新手。我会努力理解 在尝试帮助他人之前投反对票是没有用的 我没有反对你的问题,只是标记为重复 【参考方案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()"。

以上是关于Array.push() 不工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

array.push() 方法没有向数组添加任何内容并且工作异常

复制工作表而不复制代码

在 promise.then 或 promise.catch 中调用时,Array.push 的工作很奇怪

js如何生成指定范围内的随机数

为啥它不工作。过渡属性? [复制]

Array.push(Object) 插入对象数组