js中怎么给await设置超时?
可以使用Promise.race(iterable)来实现,它可以接受一个Promise数组,一旦数组中的某个Promise拒绝或解决,它就会直接返回拒绝或者解决,比如说网络请求10s超时我们可以这样写。
const result = await Promise.race([
fetch('https://q.zhixing.co'),
new Promise((resolve, reject) => setTimeout(() => reject('timeout'), 10000))
])
如果10s后,fetch还没发回结果或者抛出错误,则timeout中的reject('timeout')会先触发。如果常用可以封装一个awaitTimeout方法。
const awaitTimeout = (promise, timeout) =>
Promise.race([
promise,
new Promise((resolve, reject) => setTimeout(() => reject('timeout'), timeout))
])
//使用
await awaitTimeout(fetch('https://q.zhixing.co'), 10000)
内容