unawaited_futures: 돌려받은 Future를 'await'하지 않는 건 아닌지 확인해요
unawaited_futures: 돌려받은 Future를 'await'하지 않는 건 아닌지 확인해요
분석기가 내보내는 진단에는 이름이 있어요. unawaited_futures는 Future 또는 FutureOr 타입의 표현식을 기다리지 않고 지나칠 때 알려주는 진단이에요. 원문의 요지는 "이 표현식이 만들어내는 Future에 'await'가 빠졌다"는 내용이에요.
본문
설명
분석기는 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);