예시 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 가 정상적으로 출력되었다.
'Flutter > Document' 카테고리의 다른 글
Flutter hive dark mode 문서 (0) | 2022.05.03 |
---|---|
Flutter 상태관리 (Ephemeral, App State) (0) | 2022.01.13 |
compileSdkVersion , minSdkVersion , targetSdkVersion (0) | 2021.05.28 |
혼자 공부해서 개발부터 출시까지 해본 첫 Flutter 프로젝트 (2) (0) | 2021.05.07 |
혼자 공부해서 개발부터 출시까지 해본 첫 Flutter 프로젝트 (1) (0) | 2021.05.06 |