['https://1.2.3.4'、 'https://httpbin.org/delay/3'、 'https://httpbin.org/status/500']のURLからベストURL(ローカルキャッシュ)を探していて、5秒のタイムアウトで最適なものを選択してください。それ以外の場合は「https://httpbin.org/status/200」にフォールバックします。この人工的な例では、 'https://httpbin.org/delay/3'が勝つはずです!フェッチするにはどのように最適なURLを選択しますか?
function fallback(response) {
if (response.ok) {
return response;
}
console.log("Trying fallback")
return fetch("https://httpstat.us/200") // absolute fallback
}
var p = Promise.race([
fetch('https://1.2.3.4'), // will fail
fetch('https://httpbin.org/delay/3'), // should be the winner
fetch('https://httpbin.org/status/500'), // will fail
new Promise(function(resolve, reject) { // Competing with a timeout
setTimeout(() => reject(new Error('request timeout')), 5000)
})
])
.then(fallback, fallback)
.then(console.log)
私が持っているコードは、任意の戻りPromise raceは終了となる問題があります。 「https://httpbin.org/delay/3」が正しくレースに勝つように、これを最もうまく構築するにはどうすればよいですか?
を経由して来る、あなたは約束を拒否する意味ですか? –
サーバーが到達不能でない限り、約束は常に成功するはずです。何が起きるかは、サーバーが応答しますが、ステータスは200ではないため、有効なエンドポイントではありません。 – Eladian