Future<String> createOrderMessage() async { var order = await fetchUserOrder(); return 'Your order is: $order'; } Future<String> fetchUserOrder() { return Future.delayed( Duration(seconds: 2), () => 'Large Latte', ); } void main() { print(createOrderMessage()); }
Instance of '_Future<String>' // 출력결과
이렇게 출력되는 이유를 알아보자.
main method에서 createOrderMessage()를 호출하고 호출된 메소드에서 await를 만나면
일단 String이 없는 Future<String>을 반환한다.
그러면 main method에서 Future에 String이 전달되기 까지 기다려야 하는데,
createOrderMessage() 메소드는 await fetchUserOrder()에서 2초간 대기상태에 있다.
main 메소드에서는 createOrderMessage() 메소드를 호출할 때, await 을 사용하지 않았으므로,
바로 print()를 해버렸으니
속이 비어버린 Future<String>의 객체가 반환되었다.
해결방법은 main메소드도 async 메소드로 만들고, createOrderMessage()를 호출할 때에
await 을 사용해야한다.