2016-08-01 87 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很高興幫助! –

相關問題