Future
비동기 작업의 결과를 미완성, 완성 두 가지 형태로 표현
일종의 약속이자, 해당 결과를 추후에 확인 가능하다는 의미
일정 시간이 지난 후 실제 값이나 에러가 있을 경우 에러를 반환
async
함수 본문 앞에 키워드로 사용하여 비동기로 표시
await
async 내에서 작동하는 기능
말그대로 기다린다는 의미
예시)
await이 없을 때
void main() {
print('start');
testFunc1();
print('end');
}
testFunc1() {
Future<String> fileContent = testFunc2();
print(fileContent);
}
Future<String> testFunc2() {
Future<String> result = Future.delayed(Duration(seconds: 5), () {
return 'loading Delay 5sec';
});
return result;
}
await이 없으므로 모두 진행될 때까지 기다리지 않기 때문에 미완성 상태인 Future <> 형태로 반환된다
2.testFunc2 함수를 await으로 받을 때
void main() {
print('start');
testFunc1();
print('end');
}
testFunc1() async{
String fileContent = await testFunc2();
print(fileContent);
}
Future<String> testFunc2() {
Future<String> result = Future.delayed(Duration(seconds: 5), () {
return 'loading Delay 5sec';
});
return result;
}
print문 두 가지는 testFunc1은 await로 받지 않으므로 testFunc2를 기다리지 않고 바로 실행이 돼서 먼저 보이고 testFunc2 함수를 await로 받았기에 delay를 걸어준 만큼 5초 있다가 출력된다
3. testFunc1도 await로 받기
void main() async {
print('start');
await testFunc1();
print('end');
}
testFunc1() async {
String fileContent = await testFunc2();
print(fileContent);
}
Future<String> testFunc2() {
Future<String> result = Future.delayed(Duration(seconds: 5), () {
return 'loading Delay 5sec';
});
return result;
}
2번 예제와 달리 testFunc1도 await로 받아줬기 때문에 print('start')가 수행되고 testFunc1 함수가 완료될 때까지 기다리고 print('end')가 실행된다
'Flutter' 카테고리의 다른 글
Flutter - 다트의 객체지향 프로그래밍 (0) | 2022.01.16 |
---|---|
Flutter - 파라미터 (0) | 2022.01.16 |
Flutter - AVD(에뮬레이터) 설치 (0) | 2022.01.03 |
Flutter - ListView (0) | 2022.01.02 |
Flutter - Container안에 이미지 넣기 (0) | 2022.01.02 |