我有承诺问题
我希望使用promise获得所有类别和子类别(多级别类别)。但我不能得到多层次的承诺。我可以得到第一个Promise使用Promise.all(Array)但不能得到孩子的承诺。
getChild: function(_cats){
var arrCat=[];
var that = this;
for (var i = 0, len = _cats.length; i < len; i++) {
var t = new Promise(function(resolve,reject){
var a = [];
var _c = _cats[i];
_cats[i].getChildren(function(err, _childs){
a.push({
root: _c,
child: that.getChild(_childs)
});
resolve(a);
})
})
arrCat.push (t);
}
return Promise.all(arrCat);
和其他函数调用和响应api:
this.getChild(_cats).then(_r => {
return res.ok(_r);
})
和respone
[{
root: {value} // it's ok
child: promise(pending) //it's problem
}]
请帮帮我!谢谢!
答案 0 :(得分:2)
首先提取cat.getChildren
的已宣传版本以使代码清晰。然后映射所有类别,并为每个类别返回一个Promise,只有在通过递归调用getChild
加载每个嵌套子项后才能解析。像这样的东西应该做的伎俩
function getChildren(cat) {
new Promise(function(resolve) {
cat.getChildren(function(_, children) {
resolve(children)
})
})
}
getChild: function getChild(_cats) {
return Promise.all(
_cats.map(function(cat) {
return getChildren(cat)
.then(getChild) // load each child
.then(function(children) {
return {
root: cat,
children: children
}
})
})
)
}
&#13;
答案 1 :(得分:0)
这段代码非常完美。感谢Yury
function getChildren(cat) {
new Promise(function(resolve) {
cat.getChildren(function(_, children) {
resolve(children)
})
})
}
getChild: function getChild(_cats) {
return Promise.all(
_cats.map(function(cat) {
return getChildren(cat)
.then(getChild) // load each child
.then(function(children) {
return {
root: cat,
children: children
}
})
})
)
}