我正在开发一个带有角度前端的项目和一个在nodejs中开发的restfull后端 . 该项目使用现有的MySQL数据库 . 我使用sequelizejs orm来连接节点和mysql .
在数据库中有2个实体:用户和项目 . 一个项目有很多用户(命名为 Worker )
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);
});
Sequelize工作正常 . 它返回所有项目,getWorkers返回此项目的正确用户 .
问题是什么?问题是异步调用,getWorkers在发出响应后被调用 . 这是不正确的 . 我需要在结果发送之前在每个项目中添加worker . console.log说:b b b c a a a a a a a a a(“c”是在“a”getWorkers之前调用的json响应 . 正确的方法是:b a a a b a a a a a b a c
1 回答
这里有两个选项:您可以稍微修改现有代码,只有在所有getWorkers调用成功后才返回,或者您可以使用预先加载来一次性获取项目和工作:
选项1
_.done
创建一个在调用projects.length次之后调用res.json的函数 . 如果您的项目中还没有下划线/ lodash,则可以使用Sequelize.Utils._.after
.选项2