hax.github.com
hax.github.com copied to clipboard
AbortSignal.timeout()
常见的给请求加 timeout 的代码:
async function get(url: string, timeout: number) {
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => reject(new Error("Timeout")), timeout);
})
const fetchPromise = fetch(url)
// 使用Promise.race来竞赛fetch请求和超时Promise
return Promise.race([fetchPromise, timeoutPromise])
}
这代码work,但利用好API可以更简单:
return fetch(url, { signal: AbortSignal.timeout(timeout) })
Off topic:有些IDE有显示 parameter name 的选项,但在这个例子里感觉有点唠叨:
AbortSignal.timeout(time:timeout)