[Flutter]

[Flutter] Future / async / await 예제 메모 3

Hevton 2022. 3. 12. 21:34
반응형

Future<String> fu() {
  
  return Future.delayed(Duration(seconds: 3), () {
    
    print('SUCCESS');
    return 'STR';
  });  
}

Future<String> du() {
  
    return Future.delayed(Duration(seconds: 10), () {
    
    return 'AO';
  });  
}

Future<String> hi() async {
  
  
  fu().then((e) {print(e);});
  
  var x = await du();
  print(x);
  
  return 'CLEAR';
}


void runFunc() async {
  
  
  final f = await hi();
  print(f);
  print('WAIT');
  
}

void main() {
  
  runFunc();
}

 

3초 SUCCESS STR -> 10초 AO CLEAR WAIT

 

 

알고있었듯이, async await 하면 아래 실행 안되고 기다리는게 맞음.
then 하면 안기다리고 아랫줄 실행하는거고. (then 안에 코드는, 콜백으로 실행되고)

then 하고 아래에 다른코드에 await 넣으면 
then 코드는 안기다리지만 그 await때문에 그 await아래도 당연히 기다리게되지.

 

 

 

 

아래 코드는, 위 코드에서 hi()의

  var x = await du();
  print(x);

대신

  await du();

으로만 바꿔준 코드임.


Future<String> fu() {
  
  return Future.delayed(Duration(seconds: 3), () {
    
    print('SUCCESS');
    return 'STR';
  });  
}

Future<String> du() {
  
    return Future.delayed(Duration(seconds: 10), () {
    
    return 'AO';
  });  
}

Future<String> hi() async {
  
  
  fu().then((e) {print(e);});
  
  await du();
  
  return 'CLEAR';
}


void runFunc() async {
  
  
  final f = await hi();
  print(f);
  print('WAIT');
  
}

void main() {
  
  runFunc();
}

 

 

당연히, 똑같은 원리로

3초 SUCCESS STR -> 10초 CLEAR WAIT

 

 

당연한 말이지만

var x = await du(); 아래에서 var x에 대한 값이 실제로 쓰이거나 안쓰이거나 상관없이 await은 그냥 끝날때까지 그 아래 코드를 실행안하고 기다리는 거니까. 리턴도 늦어지는거고.

 

반응형