Javascript node.js如何处理回调中对象和变量的更改

Javascript node.js如何处理回调中对象和变量的更改,javascript,node.js,callback,Javascript,Node.js,Callback,我刚刚用node.js启动了一个大型项目,我偶然发现了一些回调问题。我以前做过一些node.js开发,但只是一些基于教程的小东西 我有一个用户模型和一个所有者模型,谁是该用户的所有者……基本上,我在node.js中构建的部分将是一个REST服务,因此我需要发送一个包含用户及其所有者名称的json。我的问题是试图像在ruby或php中那样获取所有者名称,并将其设置为属性..但它不起作用 在node.js中,如果需要更改回调函数中的对象,人们如何处理这种逻辑?我也不希望它影响性能 我使用mysql作

我刚刚用node.js启动了一个大型项目,我偶然发现了一些回调问题。我以前做过一些node.js开发,但只是一些基于教程的小东西

我有一个用户模型和一个所有者模型,谁是该用户的所有者……基本上,我在node.js中构建的部分将是一个REST服务,因此我需要发送一个包含用户及其所有者名称的json。我的问题是试图像在ruby或php中那样获取所有者名称,并将其设置为属性..但它不起作用

在node.js中,如果需要更改回调函数中的对象,人们如何处理这种逻辑?我也不希望它影响性能

我使用mysql作为数据库,因为这是一个要求。代码是这样的:

//find all 
req.models.users.find({
    'id' : req.query.id
}, function(err, users) {
    if (err) console.log(err); //do something better here
    else {
        var json = [];
        users.forEach(function(user) {
            user.getOwner(function(err, owner) {
                user.accountOwner = owner.name;

                json.push(user;
            });    
        });

        res.type('application/json');
        res.send(json);
    }
});
我想发送这样的邮件: [{ “id”:user.id, “用户名”:user.username, “电子邮件”:user.email, “所有者”:user.owner.name” },
{…}]

问题是您不了解节点代码的控制流。它不是按时间顺序从上到下逐行进行的。因此,您的问题是您的
res.send(json)
发生在(时间)之前您的
user.getOwner
回调将执行,因此您发送空json,然后在发送后将内容填充到json数组中。您需要使用类似
async的方法。要进行连接,请等待填充所有用户的所有者,然后发送响应。或者您可以实际让数据库连接通过编写SQL连接而不是对数据库执行N+1查询来获取数据。

是的,我知道我做错了事情,我不太了解node.js的工作原理,,,我说过这是我在node中的第一个大型项目,来自ruby背景…我正在寻找node中这个相当简单的工作流的解决方案和指导。我认为问题是你假设,既然ruby/rails中有些东西很容易,那么node中也很容易。没有相关性。node/ruby中有些东西同样容易,ruby中有些容易的东西在node中很难(像这样),ruby中有些难的东西在node中很容易(像并行执行第二组DB查询)。