Balbas Code

非同期処理を順番通りに行うについて

公開日: 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つ目の関数が走ってしまいます。

業務でも順番に動かないことがあり、困ってコールバック処理を書いていたので、今回の発見は正規の大発見となります。