[英]Multi level Promise in nodejs
我对诺言有疑问
我想使用promise获取所有类别和子类别(多级类别)。 但是我不能得到多层次的承诺。 我可以使用Promise.all(Array)来获得第一个Promise,但是不能得到子承诺。
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);
})
和回应
[{
root: {value} // it's ok
child: promise(pending) //it's problem
}]
请帮我! 谢谢!
首先提取promisified的版本cat.getChildren
使代码清晰。 然后在所有类别上进行映射,并为每个类别返回一个Promise,该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 } }) }) ) }
此代码工作完美。 感谢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 } }) }) ) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.