【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part33 Dartの特徴
「基礎 から 学ぶ Flutter 」という書籍で 学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part33 )です。
前回
【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part32 Dartの特徴
今回はasync/await
について学習します。
Dartの特徴
async/await
なにやら難しいものなのかと思ったのですがどうやらFuture
のシンタックスシュガーとのことです😄
早速おさらいです。
【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part30 Dartの特徴
前回のコードを少し改良しました。findCompanyName
に注目します。
class User {
String name = '';
int company = 1;
User(this.name);
}
class Company {
int id;
Company(this.id);
}
Future<User> fetchUser(String id) {
return Future((){
// ★
return User(id);
});
}
Future<Company> fetchCompany(int companyId) {
return Future(() {
// ▲
return Company(companyId);
});
}
// 前回のmain関数を少し変更
Future<int> findCompanyCode(){ // 旧 : void main() {
print('1');
var v = fetchUser("raika").then((User user) {
// user変数は★のオブジェクトが入っている
print('3');
return fetchCompany(user.company);
}).then((Company company) {
// company変数には▲のオブジェクトが入っている。
// 成功した処理
print('4');
// 追加
return company.id;
}).catchError((error){
// エラー処理
print('4');
// 追加
return -1;
}).whenComplete((){
// どちらかが終わったら呼ばれる
print('5');
});
print('2');
return v;
}
// 新しくmainを創設。async/await使わないとFuture<int>から値を取り出せない・・・。
void main() async{
print(await findCompanyCode());
}
findCompanyName
をasync/await
にしてみます。
この時、catchError
やwhenComplete
は使えないそうです。
代替として、try-catch-finally
を使うとのこと。
( ^ω^)・・・結局ここにたどり着くわけですか!
class User {
String name = '';
int company = 1;
User(this.name);
}
class Company {
int id;
Company(this.id);
}
Future<User> fetchUser(String id) {
return Future((){
// ★
return User(id);
});
}
Future<Company> fetchCompany(int companyId) {
return Future(() {
// ▲
return Company(companyId);
});
}
Future<int> findCompanyCode() async {
print('1');
var companyId = 0;
try {
var user = await fetchUser("raika");
print('3');
var company = await fetchCompany(user.company);
print('4');
companyId = company.id;
} catch (e) {
print('4');
companyId = -1;
} finally {
print('5');
}
print('2');
return companyId;
}
// 新しくmainを創設。async/await使わないとFuture<int>から値を取り出せない・・・。
void main() async{
print(await findCompanyCode());
}
この結果は「1 3 4 5 2 1」となります。
最後に
断然async/awaitを使用した方が(私には)わかりやすいですね!
Future(then-catchError-whenComplete)
の構文って使うことあるのでしょうか?
JavaScriptから参加したエンジニアの方はこちらの方がわかりやすいのかもしれないと勝手なことを思いました。
async/awaitしか勝たん!
今日はここまで!
ディスカッション
コメント一覧
まだ、コメントがありません