2016-08-01 45 views
0

我正在使用蓝鸟承诺在Node.js中工作。我想在我的承诺连锁使用Promise.all,并试图这样:是否可以链接.all()而不是使用Promise.all()?

request-promise(some_API_call) 
 
.then((responseBody) => { 
 
     
 
     // using responseBody to determine N new API calls to make 
 
    
 
     var arrayPromises = []; 
 
    
 
     for (var i=0 ; i<N ; i++) { 
 
      var newPromise = request-promise(new_API_call_i); 
 
      arrayPromises.push(newPromise); 
 
     } 
 
    
 
     return(arrayPromises); 
 
    
 
}) 
 
.all(arrayPromises) 
 
.then((arrayResults) => { 
 
    // do something 
 
});

引发我一个错误:arrayPromises is undefined

我能想到的唯一的另一种方法是:

request-promise(some_API_call) 
 
.then((responseBody) => { 
 
     
 
     // using responseBody to determine N new API calls to make 
 
    
 
     var arrayPromises = []; 
 
    
 
     for (var i=0 ; i<N ; i++) { 
 
      var newPromise = request-promise(new_API_call_i); 
 
      arrayPromises.push(newPromise); 
 
     } 
 

 
     Promise.all(arrayPromises) 
 
     .then((arrayResults) => { 
 
      // do something 
 
     }); 
 
})

不知:

  • 所有这些模式是正确的?
  • 我不会一次又一次地在另一个反模式中下降:在此背景下嵌套承诺链是否正确?

回答

2

arrayPromises未定义,因为它是在回调范围内定义的,以下then无权访问。我想你会想从你的初始then返回Promise.all并继续从那里的链:

request-promise(some_API_call) 
.then((responseBody) => { 

     // using responseBody to determine N new API calls to make 

     var arrayPromises = []; 

     for (var i=0 ; i<N ; i++) { 
      var newPromise = request-promise(new_API_call_i); 
      arrayPromises.push(newPromise); 
     } 

     return Promise.all(arrayPromises); 

}) 
.then((arrayResults) => { 
    // do something 
}); 
+0

可爱。我的两个想法同时写得很简单,同时保持代码平坦。为什么我无法想象这首先是T_T。谢谢 ! –

+0

对我来说,解决别人问题的办法总是比解决我自己的问题更为明确:P很高兴帮助! –

相关问题