간단한 Future 사용법 정리.
import 'dart:async';
void printDailyNewsDigest() { // Future 가 완료되기 이전에 인스턴스만 반환
var newsDigest = gatherNewsReports();
print(newsDigest);
}
void main() {
print('======= Start =======');
printDailyNewsDigest();
// 아래 함수들은 모두 기다리게 하려고 의도함, 하지만 실패
printWinningLotteryNumbers();
printWeatherForecast();
printBaseballScore();
}
void printWinningLotteryNumbers() {
print('printWinningLotteryNumbers()');
}
void printWeatherForecast() {
print('printWeatherForecast()');
}
void printBaseballScore() {
print('printBaseballScore()');
}
const news = '<gatherd neews goes here>';
const oneSecond = Duration(seconds: 2);
Future<String> gatherNewsReports() =>
Future.delayed(oneSecond, () => news);
의도하지 않은 출력결과 - printDailyNewsDigest 가 완료되기전에 반환되기 때문에 리턴 타입만 출력된다.
Instance of '_Future<String>' ==> printDailyNewsDigest() 함수가 완료되기 전에 반환됨.
printWinningLotteryNumbers()
printWeatherForecast()
printBaseballScore()
- async, await 옵션 추가
import 'dart:async';
// async, await 옵션 추가
void printDailyNewsDigest() async {
var newsDigest = await gatherNewsReports(); // take time
print(newsDigest);
}
<의도한 출력결과>
======= Start =======
printWinningLotteryNumbers()
printWeatherForecast()
printBaseballScore()
<gatherd neews goes here> ==> 2초 후, 결과가 정상적으로 출력됨
- async, await 대신에 then 사용하는 경우
import 'dart:async';
void printDailyNewsDigest() {
var newsDigest = gatherNewsReports();
newsDigest.then((value) => {
// 단점은 value 에 대한 접근을 then 내부에서만 가능함.
print(value)
});
}
오류 발생할 경우를 대비해서 try-catch 구문 추가
import 'dart:async';
void printDailyNewsDigest() async {
try{
var newsDigest = await gatherNewsReports();
print(newsDigest);
}catch(e){
print(e.toString());
}
}
--------------------
import 'dart:async';
void printDailyNewsDigest() {
var newsDigest = gatherNewsReports();
newsDigest.then((value) => {
print(value)
});
newsDigest.catchError((e) => {
print(e)
});
}
'Dart' 카테고리의 다른 글
[Dart] Class - getter, setter (0) | 2021.05.27 |
---|---|
[Dart] Class - 선언 및 생성자 (0) | 2021.05.27 |
[Dart] Null Safety (0) | 2021.05.12 |
[Dart] Stream 처리. (0) | 2021.05.01 |
[Dart] 상속과 변수 초기화 (0) | 2021.04.30 |