0Pricing
Dart Academy · レッスン

asyncコードのエラーハンドリング

awaitとtry/catchを安全に使う

「asyncコードのエラーハンドリング」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

Futureは失敗することがある

非同期処理では、サーバーがタイムアウトしたり、ファイルが見つからなかったりすることがあります。Futureは値ではなくエラーで完了することもあります。

awaitでtryとcatchを使う

awaitをtry/catchで囲むと、失敗したFutureはその行で例外を投げます。通常の同期処理で発生するエラーと同じように扱えます。

try {
  final data = await fetch();
} catch (e) {
  print("failed: $e");
}

特定の型を捕捉する

on節を使うと、特定の種類のエラーだけを正確に処理し、それ以外の失敗はそのまま上位へ伝えられます。

try {
  await load();
} on TimeoutException {
  print("too slow");
}

エラーを調べる

catch (e, s)を追加すると、エラーオブジェクトとスタックトレースの両方を取得できます。非同期処理の失敗を、より簡単にデバッグできます。

catch (e, s) {
  print(e);
  print(s);
}

finallyは必ず実行される

finallyブロックは、awaitが成功した場合も例外を投げた場合も実行されます。そのため、ファイルを閉じたりスピナーを停止したりする処理に適しています。

try {
  await save();
} finally {
  closeFile();
}

asyncから例外を投げる

async関数内でthrowすると、返されるFutureがそのエラーで完了します。呼び出し元はそのエラーを捕捉できます。

Future<int> risky() async {
  throw StateError("nope");
}

thenチェーンのエラー

awaitを使わない場合は、FutureにcatchErrorを付けて、then形式のチェーンで発生した失敗を処理します。

fetch().then(use).catchError(handle);

デフォルト値で復旧する

catchErrorまたはcatchでは、代替値を返せます。失敗した後もプログラムを適切に継続できます。

未処理のFutureエラー

失敗したFutureを無視すると、アプリをクラッシュさせたり大きなログを出したりする未捕捉エラーになる可能性があります。Futureは必ずcatchするかawaitしてください。

必要に応じて再スローする

catch内でrethrowを使うと、ここで失敗を記録しながら、外側のハンドラーにも処理を委ねられます。

catch (e) {
  log(e);
  rethrow;
}

finally内のawait

finally内でもawaitを使えます。関数が戻る前に、バッファのフラッシュなどの非同期クリーンアップを実行できます。

クイックチェック

非同期エラーの捕捉について確認しましょう。

まとめ:非同期エラー

awaitをtry/catchで保護し、onで型を指定し、finallyで後片付けを行い、必要に応じて復旧または再スローする方法を学びました。🛡️

よくある質問

「asyncコードのエラーハンドリング」レッスンは無料ですか?

はい。「asyncコードのエラーハンドリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「asyncコードのエラーハンドリング」で何を学びますか?

awaitとtry/catchを安全に使う ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「asyncコードのエラーハンドリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. イベントループとマイクロタスク
  2. Futureの作成とawait
  3. asyncコードのエラーハンドリング
  4. Future.waitと並列処理
← Dart Academyに戻る