2016-10-18 7 views
0

私は、エラーがキャッチされた場合に3回再試行するように、別のメソッドにラップされた約束事(要求約束)を持っています。その部分は正常に動作しています。私はpromise.all()を使用したいと思います。なぜなら、最終的に大量のhttp-requestを持つことになるからです。私がこれまで使用していた方法では、すべての再試行が完了する前にpromise.all()はコールバック関数を呼び出しています。 promise.all()がコールバックする前にすべての再試行が完了するのを待つ方法がありますか?Promise.all()を使用して、個々のエラーが再試行することを約束します

var http_req = require('request-promise') 

function My_Http(retries, options) 
{ 
    return http_req(options) 
      .then(data=>{console.log('success')}) 
      .catch(err => { 
       retries > 0 ? My_Http(retries-1, options) : console.log(err.message) 
      }) 
} 

var promises = [] 
promises.push(My_Http(3, options1)) 
promises.push(My_Http(3, options2)) 

promise.all(promises).then(data=> {console.log(data)}) 

答えて

1

わかりました私は、私がMy_Httpの内側を除去し、全体の三元の文を返し、これはダム間違いだったと思うが、他の人が見ることのために良いかもしれません。

var http_req = require('request-promise') 

function My_Http(retries, options) 
{ 
    return http_req(options) 
      .catch(err => { 
       return retries > 0 ? My_Http(retries-1, options) : console.log(err.message) 
      }) 
} 

var promises = [] 
promises.push(My_Http(3, options1)) 
promises.push(My_Http(3, options2)) 

promise.all(promises).then(data=> {console.log(data)}) 
+0

はい、再試行した約束を返す必要があります。 '.then()'は再試行を妨げていませんでした。あなたが '.then()'から値を返さなかったので、戻り値を取得するのを止めていました。 – jfriend00

+1

注:thenブロックはうまくいきました。違いをもたらすキャッチブロックの戻り値です。 –

+0

は '.push'ではなく' .map'を推奨します。 –

関連する問題