Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

akatsukaha
docomo Developer supportの企画・運用をしています。
https://dev.smt.docomo.ne.jp/
nttdocomo
企業や開発者向けにドコモが保有する技術に限らず、様々なAPIを提供するサービス
https://dev.smt.docomo.ne.jp/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした