【发布时间】:2015-02-14 06:52:11
【问题描述】:
任务是在 node.js 中递归地构建一个树形结构。也就是说,我使用一组幻灯片,其中可能还包括其他子甲板。我是函数式编程的新手,我一直在理解我需要做什么。我知道,有更高级的方法来控制流量,但如果可能的话,我想一开始尝试以嵌套方式进行。我现在拥有的:
-
server.js 调用一个 api 并返回一个 json 对象:
router.get('/deck/tree/:rev_id', function(req, res) { var Deck = require('./models/deck'); var deck = new Deck(connection); deck.getTree(req.params.rev_id ,function (tree) {res.json(tree)}); }); -
在甲板模块中,我有几个功能: 2.a 获取牌组标题的函数:
this.getTitle = function(rev_id, callback){ var sql = "SELECT title FROM ?? WHERE ?? = ?"; var inserts = ['deck_revision', 'id', rev_id]; sql = mysql.format(sql, inserts); connection.query(sql, function(err, results) { if (err) throw err; callback(results[0].title); }); };
2.b 获取甲板“直接”子代的函数:
this.getChildren = function(acc, callback){
acc.children = [];
var sql = "SELECT item_id AS id, item_type AS type FROM ?? WHERE ?? = ? ORDER BY position";
var inserts = ['deck_content', 'deck_revision_id', acc.id];
sql = mysql.format(sql, inserts);
connection.query(sql, function(err, results) {
if (err) throw err;
results.forEach(function(res_item){
acc.children.push({'id': res_item.id, 'type': res_item.type});
if (acc.children.length === results.length){
callback(acc);
}
});
});
};
-
应该建立树的功能(暂时不起作用):
var results = []; this.getTree = function(id, callback) { var acc = {}; var deck = this; var new_slide = new Slide(connection); deck.getTitle(id, function (title_str) { acc.title = title_str; acc.id = id; acc.type = 'deck'; deck.getChildren(acc, function(new_acc){ new_acc.children.forEach(function(element){ if (element.type === 'deck'){ // I suppose the help is needed here! deck.getTree(element.id, function(new_element){ results.push(new_element); if(results.length === new_acc.children.length) { callback(results); } }); }else{ new_slide.getTitle(element.id, function(title_str){ element.title = title_str; results.push(element); if(results.length === new_acc.children.length) { callback(results); } }); }
【问题讨论】:
标签: javascript node.js recursion tree functional-programming