[Dart] Completer를 이용한 콜백을 Future로 만들기

콜백 함수를 Future로 만드는 방법을 알아봅니다

[Dart] Completer를 이용한 콜백을 Future로 만들기
Future for-loop / Future.wait

자바스크립트 / Node.js 환경에서 개발하던 개발자들이라면 콜백을 Promise를 이용해 비동기 처리를 해본 경험이 있을 것입니다.

Dart에도 Promise에 상응하는 Future가 있는데, 자바스크립트의 new Promise((resolve, reject)=> {}와 같은 동작을 하기 위해서 resolve, reject에 해당하는 Completer를 이용해야합니다.

Duration, Function을 파라미터로 받는 Future Timer 예제입니다.Future makeFutureTimer({Duration duration, Function action}) {
 final Completer completer = Completer();
 Timer(duration, () {
   String returnValue = action();
   completer.complete(returnValue);
 });
 return completer.future;
}

함수 외부에서 지정한 기간과 실행할 함수를 받고 Future를 리턴하여 해당 비동기 작업 이후 처리를 할 수 있습니다.

사용법입니다.String result = await makeFutureTimer(
 duration: Duration(seconds: 1),
 action: () {
   return 'RETURN VALUE';
 },
);
print(result);

위에서 만든 makeFutureTimer를 호출하면 1초 후에 `RETURN VALUE` 문자열을 Future<String> 타입으로 리턴합니다. Duration을 0으로 만들면 즉시 실행함수가 됩니다.

Timer 작동 후에 혹은 콜백을 Future 로 만들어야할 때 Completer를 사용해보세요.

FutureTimer예제
Edit description

시리즈의 전체목록을 보려면 링크를 눌러주세요

Subscribe to Half-Built Life

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe