unstable_rethrow
unstable_rethrow
可用于避免在处理应用代码抛出的错误时捕获 Next.js 内部抛出的错误。
例如,调用 notFound
函数会抛出 Next.js 内部错误并渲染 not-found.js
组件。但是,如果在 try/catch
代码块中使用,错误会被捕获,从而阻止 not-found.js
的渲染:
你可以使用 unstable_rethrow
API 重新抛出内部错误并继续执行预期行为:
以下 Next.js API 依赖于抛出错误,这些错误应该被重新抛出并由 Next.js 自身处理:
如果路由段被标记为除非是静态的否则会抛出错误,动态 API 调用也会抛出类似不应该被开发者捕获的错误。注意部分预渲染 (PPR) 也会影响这种行为。这些 API 包括:
cookies
headers
searchParams
fetch(..., { cache: 'no-store' })
fetch(..., { next: { revalidate: 0 } })
值得注意的是:
- 这个方法应该在 catch 代码块的顶部调用,将错误对象作为其唯一参数传入。它也可以在 promise 的
.catch
处理程序中使用。- 如果你确保对可能抛出错误的 API 的调用没有被 try/catch 包裹,那么你就不需要使用
unstable_rethrow
。- 任何资源清理(如清除间隔、定时器等)都必须在调用
unstable_rethrow
之前或在finally
代码块中进行。