js中怎么给await设置超时?

js中怎么给await设置超时?

jsawaittimeoutpromise
1
326
小课
小课2022-09-05 10:40
1 个回答

可以使用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)
1
已修改
小课
小课2022-09-05 10:54
你的回答

内容