繁体   English   中英

Node.js中的多级Promise

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM