非同期処理を順番通りに行うについて
公開日: 2024-08-12 02:46:51
更新日: 2024-08-12 02:47:45
Dartで非同期処理を行っているときに、awaitを使用しているにもかかわらず、順番に移行しない理由がわかったので書いていきます。
// 投稿成功時
if (viewModel.errorMessage.isEmpty) {
// レベルアップの判定
await Provider.of<UserViewModel>(
context,
listen: false)
.checkAndUpdateQuestTime(
context);
// 投稿メッセージ表示
await Provider.of<UserViewModel>(context,
listen: false)
.setSnackBarMessage(
SnackBarMessageModel
.getMessage(
'post_success'));
}
こちらのような関数の並びで、起きていました。
本来は最初の関数(checkAndUpdateQuestTime)が終わった後に、2つ目の関数(setSnackBarMessage)が走って欲しいのですが、1つ目の関数が終わる前に2つ目の関数が走ってしまいます。
こちらの答えは
1つ目の関数の中に書かれている関数全てが非同期関数でawait句が書かれていないと、待たずに後続の2つ目の関数が走ってしまいます。
業務でも順番に動かないことがあり、困ってコールバック処理を書いていたので、今回の発見は正規の大発見となります。