* 비동기
- 아래 printWithDelay함수에서 await를 빼고 실행시키면 Future.delayed와 print가 동시에 실행되는 듯 하고, await을 넣고 실행시키면 delay가 적용된 후에 print가 실행된다.
//Future : An object representing a delayed computation.
//async : async 함수 본문 앞에 키워드 사용하여 비동기로 표시
//await : async 내에서 작동하는 기능.
Future<void> printWithDelay(Duration delay, String message) async {
await Future.delayed(delay);
print(message);
}
Future<void> printWithDelay2() async {
var order = await printWithDelayReturn();
print(order + " Method");
}
Future<String> printWithDelayReturn() async {
return Future.delayed(Duration(seconds: 3), () => '3 seconds');
}
void test() {
print('Hello Test');
}
void main() {
printWithDelay2();
printWithDelay(Duration(seconds: 1), '1 seconds Method');
test();
}
//결과
1 seconds Method
Hello Test
3 seconds Method
* then : 앞 실행이 완료 될 때 호출 할 콜백을 등록
const one = Duration(seconds: 1);
Future<void> printWithDelay(String message) {
return Future.delayed(one).then(((_) {
print(message);
}));
}
void test() {
print("Hello Test");
}
void main() {
printWithDelay("1 seconds Method");
test();
}
//결과
Hello Test
1 seconds Method
320x100
* promise ? await ? : async await과 promise는 같은 개념
- promise는 error가 어디서 발생했는지 알기 어렵고, await는 try/catch로 에러 핸들링 가능. (await 사용 권장)
void test(){}
void test2(){}
void test3(){}
test().then(test2());
test3();
- 다음과 같이 test() 함수가 실행 완료된 후 then(test2())이 호출 됨 ▶ promise의 then()
- 비동기식이면 위와 같이 test3() 함수 먼저 호출이 가능. 동기식이면 test()와 test2() 실행 완료 후에 test3() 호출됨.
같이 보면 좋은 포스팅
https://cording-cossk3.tistory.com/85
https://cording-cossk3.tistory.com/86
https://cording-cossk3.tistory.com/87
https://cording-cossk3.tistory.com/88
https://cording-cossk3.tistory.com/89
320x100
'프로그래밍 > Flutter-Dart' 카테고리의 다른 글
[Flutter] Dart 문법 (json) (0) | 2021.03.15 |
---|---|
[Flutter] Dart 문법 (getter, setter) (0) | 2021.03.15 |
[Flutter] Dart 문법 (abstract, implement) (0) | 2021.03.15 |
[Flutter] Dart 문법 (상속) (0) | 2021.03.15 |
[Flutter] Dart 문법 (class, ?, !, ?.) (0) | 2021.03.15 |
댓글