我对nodejs中的迭代函数有点麻烦。nodejs,mysql,异步迭代函数
我正在通过一个对象并检查该对象是否附有任何子对象(想想:一颗恒星有一个行星有一个月球有一个轨道站有一艘船)。
我想组装这一切到一个很好的对象阵列推送到客户端。
这里的功能:
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;
}
});
}
当我触发函数返回的未定义一个节点列表。任何人都可以给我一个正确的方向指针吗?我无法得到它的工作
谢谢!
编辑:这里的数据样本,我itterating过:
的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,
} ]
月球上有一个PARENT_ID 1和node_id是2,月球A也有一艘船(船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
},
{...}]
},
{...}]
},
{...}]
太棒了,谢谢。我确实在传输中看到(rslt = subNodeProc(rslt,sqlP,itteration_count);)你不传递回调。正确? – sn0r
@ sn0r啊,我没有发现那个电话。这确实会使事情稍微复杂化,因为您正在调用相同的方法。你能否在你的问题中提供一些示例数据,以便我能更好地理解你的用例?我会在几个小时后回来。 – shennan
感谢您的麻烦:)我添加了一些示例数据。 – sn0r