LoginSignup
46
32

More than 5 years have passed since last update.

Dartでの非同期処理(then vs async/await)

Posted at

docomo Developer supportを運用している@akatsukahaです.

Dartでは非同期処理を実施するのにFutureというものが準備されています.JavaScriptでいうところのPromiseだと理解してもらえれば大丈夫です.JavaScript同様に非同期処理をthenよりasync/awaitを用いたほうが簡潔に記述出来ます.thenを利用する場合,階層が深くなりソースコードの可読性が損なわれるため,個人的にはasync/awaitを利用するのが良いと思います.下記のコードでは,タイムスタンプをコンソールに表示し,10秒後の再度タイムスタンプをコンソールに表示するプログラムです.

DartPadにコピペしてもらえばすぐ実行出来ます.

1. thenの例

import 'dart:async';

void main() async {
  print(new DateTime.now());
  futureTest()
    .then((result) {
      print(result);
    });
}

Future <String> futureTest(){
  return new Future.delayed(new Duration(seconds: 10), (){
    return new DateTime.now().toString();
  });
}
2018-08-01 22:11:33.674
2018-08-01 22:11:43.678

約10秒後に処理が実行されている.

ここでネストの回数が1回なので見やすいですが,実際のプロジェクトでは複数回ネストされることもあり,それぞれの階層で複数の処理を記載されるので,かなり可読性が下がります.

2. async/awaitの例

import 'dart:async';

void main() async {
  print(new DateTime.now());
  var result = await futureTest();
  print(result);
}

Future <String> futureTest(){
  return new Future.delayed(new Duration(seconds: 10), (){
    return new DateTime.now().toString();
  });
}
2018-08-01 22:03:11.706
2018-08-01 22:03:21.706

約10秒後に処理が実行されている.

こちらのほうでしっくりきます.

3.最後に

公式のサイトだとthenの実行サンプルが多数ありますが,async/awaitを利用したほうが可読性があり良いと思います.

46
32
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
32