docs/zh_hans/reference/util/deferAsync.md
创建一个 AsyncDisposable 对象,在离开作用域时执行异步回调函数。
await using cleanup = deferAsync(callback);
deferAsync(callback)当你希望在作用域结束时自动执行异步清理代码时,请使用 deferAsync。用 await using 声明声明返回的对象后,即使因为错误离开作用域,回调也会在代码块结束时执行并等待完成。
import { deferAsync } from 'es-toolkit/util';
async function main() {
const connection = await connect();
await using cleanup = deferAsync(async () => {
await connection.close();
});
// 当此函数返回或抛出错误时,连接会自动关闭。
await connection.query('SELECT 1');
}
使用 await using 声明需要 TypeScript 5.2 或更高版本,以及支持 Explicit Resource Management 的运行时(Node.js 24 或更高版本、最新的浏览器)。在较旧的环境中,可以转译该语法并添加 Symbol.asyncDispose 的 polyfill。
::: info 同步清理请使用 defer
此函数会等待回调完成,因此只能在 async 函数中使用。如果清理代码是同步的,请将 defer 函数与 using 一起使用。
:::
callback (() => void | PromiseLike<void>): 对象被释放时执行的清理函数。会等待其返回值完成。(AsyncDisposable): 返回一个在被释放时执行 callback 并等待其完成的对象。