Node.js 对映射结果进行后续处理
我正在开发一个包含angular前端和在nodejs中开发的restfull后端的项目。 此项目使用现有的MySQL数据库。我使用sequelizejs orm将节点与mysql连接起来 在数据库中有两个实体:用户和项目。一个项目有许多用户(称为工作者) Sequelize很好用。它返回所有项目,getWorkers返回此项目的正确用户 有什么问题? 问题是不规则调用,在发送响应后调用getWorkers。这是不正确的。在发送结果之前,我需要在每个项目中添加工人。Node.js 对映射结果进行后续处理,node.js,sequelize.js,Node.js,Sequelize.js,我正在开发一个包含angular前端和在nodejs中开发的restfull后端的项目。 此项目使用现有的MySQL数据库。我使用sequelizejs orm将节点与mysql连接起来 在数据库中有两个实体:用户和项目。一个项目有许多用户(称为工作者) Sequelize很好用。它返回所有项目,getWorkers返回此项目的正确用户 有什么问题? 问题是不规则调用,在发送响应后调用getWorkers。这是不正确的。在发送结果之前,我需要在每个项目中添加工人。 console.log说:b(
console.log说:b(“c”是在“a”之前调用的json响应getWorkers。正确的方法是:b a a b a c您在这里有两个选项:您可以稍微修改现有代码,使其仅在所有getWorkers调用成功后返回,或者您可以使用即时加载一次性获取项目和工作人员: 选择1
\uu.done
创建一个函数,该函数在被调用projects.length次后调用res.json。如果您的项目中还没有下划线/lodash,则可以使用Sequelize.Utils.\uAfter
选择2
Wooow终于!!选项2有效!!通过表格用户项目进行多对多。非常感谢Jan。两种解决方案都很有趣。
Project.findAll().success(function(projects) {
var array=[];
projects.forEach(function(project) {
project.getWorkers().success(function(users) {
project.workers=users;
console.log('a');
});
console.log('b');
array.push(project);
});
console.log('c');
res.json(array);
});
Project.findAll().success(function(projects) {
var array =[],
done = _.after(projects.length, function () {
res.json(array);
});
projects.forEach(function (project) {
project.getWorkers().success(function(users) {
project.workers = users;
done();
});
array.push(project);
});
});
Project.findAll({
include: [
{ model: User, as: 'Workers' }
]
}).success(function (projects) {
// project.workers is already populated here
})