公式からドキュメントをフェッチ:
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つあります...)
これは私が現在やっていることです。しかし、私は追加オプションのようなものを探しています { retry:3、//最大再試行回数 retryTimeout:3000 //連続するリクエスト間のタイムアウト } – dsaket
私は、バージョン、あなたはいくつかの微妙な調整が必要な場合があります。コード内のいくつかのコメントをより明確にしたい場合は教えてください。 –