Skip to content

defer

스코프를 벗어날 때 콜백을 실행하는 Disposable 객체를 만들어요.

typescript
using cleanup = defer(callback);

사용법

defer(callback)

스코프가 끝날 때 정리 코드를 자동으로 실행하고 싶을 때 defer를 사용하세요. 반환된 객체를 using 선언으로 선언하면, 에러로 스코프를 벗어나는 경우에도 블록이 끝날 때 콜백이 실행돼요.

typescript
import { defer } from 'es-toolkit/util';

function processFile() {
  const file = openFile('data.txt');
  using cleanup = defer(() => file.close());

  // 이 함수가 반환되거나 에러를 던지면 파일이 자동으로 닫혀요.
  return file.read();
}

같은 스코프에 여러 개의 using 선언이 있으면, 콜백은 스택처럼 선언의 역순으로 실행돼요.

typescript
import { defer } from 'es-toolkit/util';

function run() {
  using first = defer(() => console.log('first'));
  using second = defer(() => console.log('second'));
  console.log('body');
}

run();
// 'body', 'second', 'first' 순서로 출력돼요.

using 선언을 사용하려면 TypeScript 5.2 이상과 Explicit Resource Management를 지원하는 런타임(Node.js 24 이상, 최신 브라우저)이 필요해요. 오래된 환경에서는 문법을 트랜스파일하고 Symbol.dispose 폴리필을 추가하면 사용할 수 있어요.

비동기 정리에는 deferAsync를 사용하세요

이 함수는 콜백을 동기적으로 실행해요. 정리 코드가 비동기이고 기다려야 한다면, deferAsync 함수를 await using과 함께 사용하세요.

파라미터

  • callback (() => void): 객체가 정리될 때 실행할 정리 함수예요.

반환 값

(Disposable): 정리될 때 callback을 실행하는 객체를 반환해요.

MIT 라이선스에 따라 배포됩니다.