Полное будущее для Firestore

# #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. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.