主题
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)
})