본문으로 바로가기
  1. Home
  2. Flutter/Document
  3. Flutter async await 정리 문서

Flutter async await 정리 문서

· 댓글개 · Dev_Whale

예시 A ( await를 안 붙인 코드)

void main() async {
  getNum(3);
  getNum(1);
}

Future<int> getNum(int num) async {
  return Future.delayed(Duration(seconds: num)).then((value) {
    print('$num초 경과');
    print('결과값 : $num');
    return num;
  });
}

결과 A

await 가 없으니 순차적으로 진행되는 코드입니다.


예시 B (await를 붙인 코드)

void main() async {
  await getNum(3);
  await getNum(1);
}

Future<int> getNum(int num) async {
  return Future.delayed(Duration(seconds: num)).then(() {
    print('$num초 경과');
    print('결과값 : $num');
    return num;
  });
}

결과 B

await getNum(3); 의 값을 return 받고서 그다음 줄인 await getNum(1);으로 진행합니다.


예시 C

void main() async {
  final a = getNum(3);
  print('main() - a : $a');
  final b = getNum(1);
  print('main() - b : $b');
}

Future<int> getNum(int num) async {
  return Future.delayed(Duration(seconds: num)).then(() {
    print('$num초 경과');
    print('결과값 : $num');
    return num;
  });
}

결과 C

await 가 없으니 순차적으로 진행되는 코드입니다. print로 a와 b의 값을 출력하려 했지만 'Instance of 'Future <int>'라는 메시지가 뜬다. 정상적으로 출력은 되지 않는다.


예시 C에서 'Instance of 'Future' 메시지에 대해 좀 더 알아보려고 한다.

예시C 에서는 각각 a와 b 값이 3초, 1초 후에 값이 getNum()에서 반환되기 때문에 출력 값이 올바르게 출력되지 않았다고 생각했다. 그래서 delay 값을 수정을 해보았다.

void main() async {
  final a = getNum(8);
  final b = getNum(4);
  Future.delayed(Duration(seconds: 10), (){
    print('10초 후 a : $a'); // a의 정상적인 출력여부 확인
  });
}

Future<int> getNum(int num) async {
  return Future.delayed(Duration(seconds: num)).then((value) {
    print('$num초 경과');
    print('결과값 : $num');
    return num;
  });
}

결과 사진


4초 경과 후 "결과값 : 4"가 출력되고 8초 경과 후 "결과값 : 8" 이 출력이 되었다. 10초에 출력되는 a 값은 결정이 되었다고 생각하고
'Instance of 'Future' 메시지가 안 뜰 거라고 생각을 했지만 메시지는 떴다. 그런데 이 글에 4-1번 코드의 2번 설명을 읽어보면 return 타입을 언급했는데 타입이 달라서 그런가 라는 생각으로 "final" 대신 "Future<int>" 타입을 사용해서 테스트해보기로 했다.

결과는 'Instance of 'Future' 메시지가 출력되었다.

  • Future<int> 이해 부족
  • 구조적으로 안 되는 것인지?

await 키워드 사용

void main() async {
  final a = await getNum(5);
  final b = await getNum(2);
  Future.delayed(Duration(seconds: 10), (){
    print('10초 후 a : $a'); // a의 정상적인 출력여부 확인
  });
}

Future<int> getNum(int num) async {
  return Future.delayed(Duration(seconds: num)).then((value) {
    print('$num초 경과');
    print('결과값 : $num');
    return num;
  });
}

10초 후 a 가 정상적으로 출력되었다.

💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.