コンテンツにスキップ

async, await

async と await

JavaScript のそれと同一。FutureStreamで扱う。

Future

JavaScript で言うPromise

1
2
3
4
5
6
7
8
9
Future<int> func() {
  return Future<int>.value(0);
}

void main() async {
  print("calling func()");
  int result = await func();
  print(result);    // 0
}

sleep っぽいことをする

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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 を使う

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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 ...
  });
}