async, await
async と await
JavaScript のそれと同一。FutureとStreamで扱う。
Future
JavaScript で言うPromise。
| Future<int> func() {
return Future<int>.value(0);
}
void main() async {
print("calling func()");
int result = await func();
print(result); // 0
}
|
sleep っぽいことをする
| Future<int> func() async {
await Future.delayed(Duration(seconds: 3));
return Future<int>.value(0);
}
void main() async {
print("calling func()");
int result = await func();
print(result);
}
|
then を使う
| Future<int> func() async {
await Future.delayed(const Duration(seconds: 3));
return Future<int>.value(0);
}
void main() async {
print("calling func()");
func().then((value) {
print(value);
});
}
|
Stream と async*
Streamを使うと何度も値を返すことができる。
async*はStreamを返すときに使う。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | Stream<int> func() async* {
int i = 0;
while (true) {
yield i++;
await Future.delayed(Duration(seconds: 1));
}
}
void main() {
final stream = func();
stream.listen((value) {
print(value); // 0 1 2 3 ...
});
}
|