본문 바로가기

Flutter

Flutter - Future, async, await

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