教程 radash tutorial

defer

运行带有延迟函数的异步函数

基本用法

_.defer 函数允许您运行一个异步函数,同时注册一些函数,这些函数会延迟到异步函数完成后再执行。这在那些在特定点之前或之后失败需要清理的脚本中非常有用。它有点像 finally 块。

灵感来自 Swift 的 defer。

传递给 _.defer 的函数会接收一个 register 函数参数,该参数可用于注册您希望在函数完成时调用的工作。如果您的函数抛出错误,然后注册的清理函数也抛出错误,默认情况下该错误会被忽略。register 函数支持一个可选的第二个 options 参数,让您可以配置重抛策略,以便清理函数中的错误被重新抛出。

ts
import { defer } from 'radash'

await defer(async (cleanup) => {
  const buildDir = await createBuildDir()

  cleanup(() => fs.unlink(buildDir))

  await build()
})

await defer(async (register) => {
  const org = await api.org.create()
  register(async () => api.org.delete(org.id), { rethrow: true })

  const user = await api.user.create()
  register(async () => api.users.delete(user.id), { rethrow: true })

  await executeTest(org, user)
})