unawaited_futures: 돌려받은 Future를 'await'하지 않는 건 아닌지 확인해요

unawaited_futures: 돌려받은 Future를 'await'하지 않는 건 아닌지 확인해요

분석기가 내보내는 진단에는 이름이 있어요. unawaited_futuresFuture 또는 FutureOr 타입의 표현식을 기다리지 않고 지나칠 때 알려주는 진단이에요. 원문의 요지는 "이 표현식이 만들어내는 Future에 'await'가 빠졌다"는 내용이에요.

출처: unawaited_futures

본문

설명

분석기는 Future 또는 FutureOr 타입을 가진 표현식에 대해, 몇 가지 특정한 경우에만 이 진단을 만들어요.

  • 표현식이 그 자체로 문장인 경우(예: f();)
  • 표현식이 캐스케이드의 일부인 경우(예: C()..f())
  • 표현식이 문자열 보간에 들어간 경우(예: '${f()}')

또한 분석기는 async 또는 async* 함수 안에 있는 표현식에 대해서만 이 진단을 만들어요.

이 진단에 대한 흔한 수정은 두 가지예요. 표현식을 await하거나, 그게 Future(FutureOr가 아니라)라면 표현식을 unawaited() 호출로 감싸는 거예요.

예시

다음 코드는 함수 g가 future를 돌려주는데 그 future를 기다리지 않아서 이 진단을 만들어요.

Future<void> f() async {
  g();
}

Future<int> g() => Future.value(0);

흔한 해결 방법

이어지는 코드가 실행되기 전에 future가 완료될 필요가 있다면, 호출 앞에 await를 붙여요.

Future<void> f() async {
  await g();
}

Future<int> g() => Future.value(0);

future가 이어지는 코드가 실행되기 전에 완료될 필요가 없다면, Future를 돌려주는 호출을 unawaited 함수 호출로 감싸요.

import 'dart:async';

Future<void> f() async {
  unawaited(g());
}

Future<int> g() => Future.value(0);

더 알아보기