【发布时间】:2014-04-06 07:34:04
【问题描述】:
我的应用中有父子模型。 Parent.create 接收 parent_name 和我要添加到 Parent 模型的子数组,以下流程描述了该函数:
1) 创建父对象
2) 创建所有子节点
3) 用更新的子数组保存父
问题是 Parent.create 可能是 async,而 'created_children' 数组在保存到 parent 时是空的(因为它不会等到 Parent .create 完成。
如何使 Model.create 依赖(或同步)?
查看下面的代码(我注释了错误部分 //BUG: EMPTY ARRAY!!!!!!!!!!):
create: function(req, res, next) {
var childrenInput = req.param('children');
var parentObj = {
name: req.param('parent_name')
};
Parent.create(parentObj, function parentCreated(err, parent) {
if (err) {
return res.redirect('/parent/new');
}
// assign children
var created_children = new Array();
for(var i=0; i < childrenInput.length; i++) {
var childObj = {
name: parentObj.childrenInput[i],
parent_id: parent.id
};
// create child
Child.create(childObj, function childCreated(err, child) {
if (err) {
for(var j=0; j < created_children.length; j++) {
Child.destroy(created_children[j].id, function childDestroyed(err) {
if (err)
{
// BIG ERROR
return next(err);
}
});
}
return res.redirect('/parent/new');
}
// add created child
created_children.push(child.id);
}) // end of Child.create;
} // end of for;
// save created children to parent
parent.children = created_children.slice();
parent.save(function(err, c) {
if (err)
{
// TODO: FUNCTION TO DESTROY ALL CHILDREN
return next(err);
}
});
return res.redirect('/parent/show/' + parent.id);
});
},
父模型
module.exports = {
schema: true,
attributes: {
name: {
type: 'string',
required: true,
unique: true
},
children: {
type: 'array',
defaultsTo: []
}
}
};
【问题讨论】:
标签: sails.js