私はfor
ループ内でFirebaseクエリを呼び出しています。しかし、Firebaseのクエリは、呼び出された順番で実行されません。ここでは、コードです:このコードでFirebaseクエリが呼び出された順番に実行されない
NSLog(@"%@", self.orderedKeys.description);
for (NSInteger i = 0; i < self.orderedKeys.count; i++) {
[[selectedLanguageRef childByAppendingPath:self.orderedKeys[i]] observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *userSnapshot) {
NSLog(@"%@", self.orderedKeys.description);
NSLog(@"%@", userSnapshot.key);
}];
}
、のNSLogはのためにこれを返します。
fakeUser8、fakeUser7、 "フェイスブック:10205598530457903"、fakeUser3、fakeUser10、fakeUser9、fakeUser14、fakeUser13
しかしuserSnapshot.key
のためのNSLogは、常にこの順序で起動します:
fakeUser3、fakeUser10、Facebookの:10205598530457903、fakeUser8、fakeUser7、fakeUser14、fakeUser13、fakeUser9
ここでは何が起こっていますか?クエリを呼び出した順序と同じ順序で呼び出すにはどうすればよいですか?
NO!これをしないでください! Firebaseは非同期で動作し、次のアクションを実行する前に、あるアクションの結果を待つ必要があります。私たちは何らかの方向性を提供することができますが、期待される結果が何であるかを知る必要があります。また、Firebase構造のスニペット(テキストとして、Firebase Dashboard-> Export)を入力してください。また、一連のクエリを実行する必要がある場合は、構造体に問題があるため、それを行わなければならない場合があります。 – Jay
@Jay私はやっていないことを明確にすることができますか?フィードバックありがとう –
Firebaseが非同期で、コードが返された値を上書きしている可能性があります。また、値が遅れて予期しない順序で返ってきている可能性があります。たとえば、最初のクエリが実行され、それを返す遅延がありますが、2番目のクエリはデータをより速く返します。返されたデータはコードのように同期していないので、移動する前に返されたデータを処理する必要があります。そのような複数のクエリはおそらく避けなければならないので、構造と意図を投稿して見てみましょう。 – Jay