我對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