defer
运行带有延迟函数的异步函数
基本用法
_.defer 函数允许您运行一个异步函数,同时注册一些函数,这些函数会延迟到异步函数完成后再执行。这在那些在特定点之前或之后失败需要清理的脚本中非常有用。它有点像 finally 块。
灵感来自 Swift 的 defer。
传递给 _.defer 的函数会接收一个 register 函数参数,该参数可用于注册您希望在函数完成时调用的工作。如果您的函数抛出错误,然后注册的清理函数也抛出错误,默认情况下该错误会被忽略。register 函数支持一个可选的第二个 options 参数,让您可以配置重抛策略,以便清理函数中的错误被重新抛出。
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)
})
相关内容
- alphabetical 按属性对对象数组进行字母顺序排序 给定一个对象数组和一个用于确定排序属性的回调函数,返回一个按字母顺序排序的新数组
- boil 将列表项缩减为一个项 给定一个项数组,返回在比较条件中获胜的最终项
- cluster 将列表拆分为指定大小的多个列表 给定一个项数组和所需的集群大小(`n`),返回一个数组的数组
- counting 创建一个包含项目出现次数的对象 给定一个对象数组和一个用于确定每个对象应如何标识的标识回调函数
- diff 创建两个数组之间的差异数组 给定两个数组,返回第一个数组中存在但第二个数组中不存在的所有项的数组
- first 获取列表中的第一个项 给定一个项数组,返回第一个项,如果不存在任何项则返回默认值