【发布时间】:2016-03-17 08:40:23
【问题描述】:
我在使用 nodejs 中的迭代函数时遇到了一些麻烦。
我正在逐步检查一个对象并检查该对象是否有任何附加的子对象(想想:一颗恒星有一颗行星有一个卫星有一个轨道站有一艘船)。
我正在尝试将这一切组装成一个很好的对象数组以推送给客户端。
函数如下:
var subNodeProc = function(nodeList,sqlP,itteration_count) {
var async = require('async');
--itteration_count;
async.each(nodeList,function(dd,cb){
var simple = {
sql:sqlP,
values:[dd.node_id],
timeout:40000
};
dd.subnodes = false;
connection.query(simple, function(err,rslt){
if (err) {
cb(err);
} else {
if (rslt.length > 0) {
var r = nodeList.indexOf(dd);
if (itteration_count > 0) {
rslt = subNodeProc(rslt,sqlP,itteration_count);
}
nodeList[r].subnodes = rslt;
}
cb();
}
});
},function(err){
if (err) {
return err;
} else {
return nodeList;
}
});
}
当我触发该函数时,它会返回一个未定义的节点列表。谁能给我一个正确方向的指针?我无法让它工作
谢谢!
编辑:这是我正在迭代的数据示例:
SQL 语句:
SELECT n.id as node_id, n.name, n.system_id, n.parent_id as parent_id FROM nodes as n WHERE n.parent_id = ?
输入的示例节点列表:
[ { node_id: 1,
name: 'Planet A',
system_id: 1,
parent_id: null,
},
{ node_id: 2,
name: 'Moon',
system_id: 1,
parent_id: 1,
},
{ node_id: 3,
name: 'Debris',
system_id: 1,
parent_id: 2,
},
{ node_id: 4,
name: 'Asteroid',
system_id: 1,
parent_id: 1,
} ]
月球 A 的 parent_id 为 1,node_id 为 2,月球 A 也有一艘船 (ship A, node_id:3, parent_id:2) 围绕它运行。
我想要什么:
[ { node_id: 1,
name: 'Planet A',
system_id: 1,
parent_id: null,
subnodes:[{
node_id: 2,
name: 'Moon A',
system_id: 1,
parent_id: 1,
subnodes: [{
node_id:3,
name: 'Ship A',
system_id:1,
parent_id:2
},
{...}]
},
{...}]
},
{...}]
【问题讨论】:
标签: javascript mysql node.js asynchronous