操作の順序JSFirebase [重複]

Aug 28 2020

以下のコードが最初に「F」アラートを実行し、次に「S」および「V」アラートを実行する理由を誰かに説明してもらえますか。

var status = ' ';
  database.ref('housekeeping/ongoing').once('value', function(snapshot){
    alert(status + "S");
    status = snapshot.val();
    alert(status + "V");
  });
  alert(status + "F");

回答

1 DougStevenson Aug 28 2020 at 00:23

once()は非同期であり、クエリが完了する直前に戻ります。提供したコールバックは、しばらくしてから実行されます。

すべてのFirebaseAPIは非同期であり、これはJavaScriptでは非常に一般的です。once()また、がpromiseを返すこと、およびそのpromiseが非同期呼び出しの結果を処理するためのより良い方法であることも知っておく必要があります。最新のJavaScriptプログラミングでは、promiseがどのように機能するかを理解することが非常に重要です。

FirebaseAPIが非同期である理由についてこのブログを読むことをお勧めします。

1 Titulum Aug 28 2020 at 00:26

ドキュメントでわかるように、onceは非同期呼び出しです。これは、データが取得されるまで、コードが同期タスクを続行することを意味します。次に、コールバック内のコードが実行されます。

「S」および「V」アラートを最初に表示するには、async/await以下を使用する必要があります。

async function getDatabaseData() {
  const snapshot = await database.ref('housekeeping/ongoing').once('value');
  alert(status + "S");
  status = snapshot.val();
  alert(status + "V");
  alert(status + "F");
}

についての詳細 async/await