首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在await函数中添加超时

在使用await函数时,有时候我们需要设置超时时间,以避免长时间的等待导致程序的阻塞。以下是一种在await函数中添加超时的常见方法:

  1. 使用Promise.race方法:通过将await函数和一个返回超时reject的Promise放入Promise.race中,可以在超时时抛出异常。
代码语言:txt
复制
function timeout(ms) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject(new Error("Timeout"));
    }, ms);
  });
}

async function asyncFunc() {
  try {
    await Promise.race([actualFunction(), timeout(5000)]);
  } catch (error) {
    // 处理超时异常
    console.error(error);
  }
}

在上述代码中,timeout函数返回一个Promise,它在指定的时间(ms)后拒绝(reject)并抛出一个Timeout错误。在asyncFunc函数中,使用Promise.race将实际的await函数和超时Promise进行竞争,如果超时Promise先完成,将会抛出Timeout错误。

  1. 使用AbortController和fetch API:在浏览器环境下,可以使用AbortController和fetch API来实现超时。
代码语言:txt
复制
const controller = new AbortController();
const timeout = setTimeout(() => {
  controller.abort();
}, 5000);

try {
  const response = await fetch(url, { signal: controller.signal });
  clearTimeout(timeout);
  // 处理正常返回数据
  const data = await response.json();
  // ...
} catch (error) {
  if (error.name === "AbortError") {
    // 处理超时异常
    console.error("Timeout");
  } else {
    // 处理其他异常
    console.error(error);
  }
}

上述代码中,创建了一个AbortController和一个超时定时器timeout。在fetch API的参数中,使用signal属性将AbortController的signal传递给请求,当超时定时器触发时,调用AbortController的abort方法中止请求。如果请求超时,会抛出AbortError异常,可以在catch块中进行处理。

以上是在await函数中添加超时的两种常见方法。具体使用哪种方法取决于你的应用场景和开发环境。对于Node.js环境,可以使用第一种方法;对于浏览器环境,可以使用第二种方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券