Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
29
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@akatsukaha

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

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を利用したほうが可読性があり良いと思います.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
29
Help us understand the problem. What are the problem?