# #java #android #google-cloud-firestore
Вопрос:
У меня есть 2 коллекции Firestore, из которых я хотел бы последовательно прочитать документы. Поэтому сначала я хочу прочитать document1 из коллекции1, а затем document2 из коллекции2 на основе document1. Моя структура данных БД выглядит следующим образом: коллекция1.документ1.коллекция2.документ2
У меня была идея реализовать его с помощью CompletableFuture, чтобы 2 асинхронных процесса (получение document1 и получение document2) были связаны в цепочку.
CompletableFuture<ArrayList<QueryDocumentSnapshot>> ReadData(String collectionPath){
final CompletableFuture<ArrayList<QueryDocumentSnapshot>> future = new CompletableFuture<>();
Log.e(TAG,"Future execution has started");
db.collection(collectionPath)
.get()
.addOnCompleteListener(task -> {
Log.e(TAG,"Future execution is in progress");
if (task.isSuccessful()) {
docList.clear();
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
docList.add(document);
}
future.complete(docList);
Log.e(TAG,"Future execution has completed");
} else {
Log.e("FirebaseDB", "Error getting documents: ", task.getException());
Log.e(TAG,"Future execution failed");
future.complete(null);
}
});
return future;
}
Но это не работает, и мое будущее переходит непосредственно в строку «вернуть будущее», в то время как код внутри «addOnCompleteListener» застрял. Я предполагаю, что это происходит из-за того, что «addOnCompleteListener» — это еще один асинхронный процесс внутри моего «будущего».
Не могли бы вы посоветовать, как изменить
db.collection(collectionPath)
.get()
.addOnCompleteListener(task -> {...})
от «addOnCompleteListener» до CompletableFuture, чтобы я мог последовательно читать документы из Firestore один за другим?
Комментарии:
1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.