fetchでタイムアウト処理を実装したサンプル (10000ms版)
<button onclick="getProductJSON()">getProductJSON()</button>
<pre id="result"></pre>
async function getProductJSON() {
const controller = new AbortController()
const result = document.getElementById('result')
result.textContent = 'loading...'
await setTimeout(() => controller.abort(), 10000)
try {
const res = await fetch(`https://dummyjson.com/products/1`, {
signal: controller.signal
})
const json = await res.json()
await new Promise(p => setTimeout(p, 3000))
if (res.ok) {
result.innerHTML = JSON.stringify(json, null, ' ')
} else {
result.textContent = json
}
} catch(e) {
if (e.name === 'AbortError') {
result.textContent = 'タイムアウトエラー'
} else {
result.textContent = 'ネットワークエラー'
}
}
}
元記事を表示する