[Dart] Completer를 이용한 콜백을 Future로 만들기
콜백 함수를 Future로 만드는 방법을 알아봅니다
![[Dart] Completer를 이용한 콜백을 Future로 만들기](/content/images/size/w1200/2025/04/1-pc7hnvporzn0duk6xdcorw.png)
자바스크립트 / 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를 사용해보세요.