【发布时间】:2015-08-11 06:37:37
【问题描述】:
我有一个包含类别列表的 JSON 文件:
"data": {
"categories": [
{
"id": 1,
"name": "Clothes",
"children": [
"Womens",
"Mens",
"Children",
"Baby",
]
},
{
"id": "13",
"name": "Womens",
"children": [
"Womens Tops",
"Womens Bottoms",
"Womens Accessories",
]
},
{
"id": "33",
"name": "Womens Tops",
"children": []
},
在下面的代码中,我尝试/失败遍历每个节点及其子节点以构建一个 path 变量,该变量也与 mongo db 中的数据一起存储:
for(var i in obj.data.categories) {
var newCat = {
name: obj.data.categories[i].name,
children: obj.data.categories[i].children
};
//UPDATE OR CREATE
Category.findOneAndUpdate({name:obj.data.categories[i].name},newCat,{upsert: true},
function(err,cat) {
if(err) { return handleError(res, err); }
if(cat.children) {
//BUILD CHILDREN PATHS
for(var j=0;j<cat.children.length;j++) {
var newChildCat = {
name: cat.children[j],
};
newChildCat.path = cat.path ? cat.path+','+cat.name : cat.name;
Category.findOneAndUpdate({ name: newChildCat.name},newChildCat,{upsert: true},
function(childErr, newChildCat) {
if(childErr) { return handleError(res, childErr); }
}
);
}
}
}
);
}
但是,由于 javascript 是异步运行的,一些节点 paths 在其父节点被存储之前就被存储了。
在这方面我还是个新手,我正在寻找合适的/最佳实践方法来处理对象的异步导入,这些对象依赖于之前创建的对象,就像上面一样。
【问题讨论】:
标签: javascript json node.js mongodb mongoose