2017-09-12 9 views
0

私はネットワークリクエストに対してブラウザのネイティブfetch APIを使用しています。また、サポートされていないブラウザにはwhatwg-fetchポリフィルを使用しています。httpリクエストが失敗した場合、apiを再試行します。

しかし、リクエストが失敗した場合に再試行する必要があります。今度はこのnpmパッケージwhatwg-fetch-retryが見つかりましたが、彼らは彼らのドキュメントでそれを使用する方法を説明していません。誰かがこれを手伝ったり、私に代替案を提案したりすることができますか?

答えて

1

公式からドキュメントをフェッチ:

fetch('/users') 
    .then(checkStatus) 
    .then(parseJSON) 
    .then(function(data) { 
      console.log('succeeded', data) 
    }).catch(function(error) { 
      console.log('request failed', error) 
    }) 

はそのcatchを参照してください?フェッチが失敗したときにトリガーが発生します。たとえば、そこに再度フェッチできます。結果を返すべき作業例を追加します。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

編集約束を見てください。 Chromeで試してみましたが(v.60.0)、polyfillやあなたが言及しているパッケージは使用していませんでした(ドキュメントを慎重に読んだ後は、polifyllを取得するだけです)。

function fetchRetry(url, delay, limit, fetchOptions = {}) { 
    return new Promise((resolve,reject) => { 
     function success(response) { 
      resolve(response); 
     } 
     function failure(error){ 
      limit--; 
      if(limit){ 
       setTimeout(fetchUrl,delay) 
      } 
      else { 
       // this time it failed for real 
       reject(error); 
      } 
     } 
     function finalHandler(finalError){ 
      throw finalError; 
     } 
     function fetchUrl() { 
      return fetch(url,fetchOptions) 
       .then(success) 
       .catch(failure) 
       .catch(finalHandler); 
     } 
     fetchUrl(); 
    }); 
} 

fetchRetry('https://www.google.es',1000,4) 
    .then(function(response){ 
     if(!response.ok){ 
      throw new Error('failed!'); 
     } 
     return response; 
    }) 
    .then(function(response){ 
     console.log(response); 
    }) 
    .catch(function(error){ 
     console.log(error); 
    }); 

再試行が応答を返すかどうかはテストされていませんが、私はそうすると思います。

編集:このパッケージが見つかりましたが、フェッチAPIに取って代わり、https://www.npmjs.com/package/fetch-retry(フェッチリトライの最初のGoogle検索結果ページにこのようなパッケージが2つあります...)

+0

これは私が現在やっていることです。しかし、私は追加オプションのようなものを探しています { retry:3、//最大再試行回数 retryTimeout:3000 //連続するリクエスト間のタイムアウト } – dsaket

+0

私は、バージョン、あなたはいくつかの微妙な調整が必要な場合があります。コード内のいくつかのコメントをより明確にしたい場合は教えてください。 –

関連する問題