需要一点帮助才能让这个面包屑构建器正常工作 - 这是对父类别的递归获取,应该返回一系列条目。不太正常,我的大脑被炒了....目前只返回最后一个条目。
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);
});
答案 0 :(得分:0)
不幸的是,递归和回调并不能很好地混合所有这些。在检索到第一个类别后,您正在调用done
,但在调用walk
之前,您还没有等待对done
的其他调用完成。你需要等待他们。我会做这样的事情(伪代码):
fetch this category
if no subcategories
call callback with [{ title: ... }] and return
pending = number of subcategories
results = [[{ title: ... }]]
for each subcategory
recurse
pending--
results[index + 1] = subcategory_results
if none pending
call callback with the concatenation of the subarrays of results
答案 1 :(得分:0)
答案 2 :(得分:0)
好的得到了....需要从内部步行呼叫完成呼叫。
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
}
});
};