다트는 Future, async, await을 이용하여 비동기 작업을 처리함
당장끝나지 않을 작업에 대해 async 처리. 비동기 작업이 끝난 결과를 받기 위해 Future 클래스 사용한다.
async로 선언한 함수는 비동기적으로 실행되어 오래걸리는 작업의 경우 함수 밖의 뒷부분이 먼저 실행될 것이다.
async로 선언한 함수 내의 await 처리를 하면, 그 함수 안에서는 await 로 선언한 부분이 완료가 된 다음에 뒷 부분이 실행된다.
void main() {
print('start main');
var future = checkData();
print('end main');
print(future);
}
Future checkData() async {
var data = await getAllData();
print(data);
}
int getAllData() {
// Future.delayed(const Duration(seconds: 3));
return 1000;
}
start main
end main
Instance of 'Future<dynamic>
1000
Future로 선언한 비동기 함수의 반환값을 받기 위해서는 then을 사용한다
void main() async{
print('start main');
await checkData().then((value) => {print(value)});
print('end main');
}
Future checkData() async {
sleep(Duration(seconds: 3));
var data = await getAllData();
return data;
}
String getAllData(){
return 'Hello Dart';
}
start main
//3초후
Hello Dart
end main
void main(){
Isolate.spawn(sendMessage, '1. Kotlin');
Isolate.spawn(sendMessage, '2. Android');
Isolate.spawn(sendMessage, '3. Hybrid');
// !! dalay 시켜서 main thread 내의 spawn 모두 실행시키기.
Future.delayed(const Duration(seconds: 2), () =>
print('Future method called...')
);
}
void sendMessage(var message) {
print('This is a ${message}');
}
This is a 1. Kotlin
This is a 3. Hybrid
This is a 2. Android
Future method called...
//Json Decoding
void main(){
var jsonString = '''
[
{"name":"홍길동"},
{"name":"손홍민"}
]
''';
var info = jsonDecode(jsonString);
print(info);
//List 인지 체크
print(info is List);
//첫번째 Key:Value
print(info[0]);
print(info[0]['name']);
}
void main(){
//'' -> 변수임을 나타냄
var infoList = [{'menu':"삼겹살"},
{'name':"탕수육"},
{'menu':"보쌈"},
{'menu':"짬뽕",'price':10000}
];
// !! infoList를 출력해서 둘간의 차이를 보자. ""로 감싼것이 차이
print(infoList);
var infoText = jsonEncode(infoList);
print(infoText);
}