Javascript 递归回调
需要一些帮助才能让这个面包屑构建器工作-它是父类别的递归获取,应该返回一个条目数组。不太好用,我的脑子都快炸了。。。。当前仅返回最后一个条目Javascript 递归回调,javascript,node.js,Javascript,Node.js,需要一些帮助才能让这个面包屑构建器工作-它是父类别的递归获取,应该返回一个条目数组。不太好用,我的脑子都快炸了。。。。当前仅返回最后一个条目 var walk = function(c, done) { var results = []; Category.findById(c).exec(function(err, cat) { if(cat) { results.push({ title: cat.title, id: cat.id}); if(cat
var walk = function(c, done) {
var results = [];
Category.findById(c).exec(function(err, cat) {
if(cat) {
results.push({ title: cat.title, id: cat.id});
if(cat.parent) {
walk(cat.parent, function(err, res) {
results = results.concat(res);
});
}
return done(null, results);
}
done(results);
});
};
walk(product.categories[0].id, function(err, results) {
// if (err) console.log (err);
console.log(results);
});
不幸的是,递归和回调并没有很好地结合在一起。在检索第一个类别后,您正在调用
done
,但在调用done
之前,您不会等待对walk
的其他调用完成。你需要等他们。我会这样做(伪代码):
获取此类别
如果没有子类别
使用[{title:…}]调用callback并返回
待定=子类别数
结果=[{title:…}]]
对于每个子类别
递归
未决--
结果[索引+1]=子类别\u结果
如果没有挂起
使用结果子数组的串联调用回调
怎么样?试试这个
好例子如下:
还有写咖啡脚本的方法好的,明白了。。。。需要从内部漫游调用完成调用
var walk = function(c, done) {
var results = [];
Category.findById(c).exec(function(err, cat) {
if(cat) {
results.push({ title: cat.title, id: cat.id});
if(cat.parent) {
walk(cat.parent, function(err, res) {
results = results.concat(res);
done(null, results);
});
} else {
done(null, results);
}
} else {
done('No cat found'); // Error
}
});
};
他可以添加一个堆栈计数器,这样他就可以在最底层调用它一次。@scones:恐怕我不太明白你在说什么。也许你想添加你自己的答案?请注意,每只猫只有一个父猫,如果猫没有父猫,那么它应该结束。我在做(结果)之前做了一个else,但那也不正确