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