Я думаю, что это простая проблема, у меня есть 3 основных коллекции: collection_A, collection_B и collection_ C. Проблема в том, что мне нужен документ "A" из collection_A. Документ «A» содержит атрибут массива «collection_B_uids», после получения документа «A» мне нужно получить каждый документ collection_B, который находится в collection_B_uids, поэтому я сделал это:
public Task foo() {
return FirebaseFirestore.getInstance().collection("collection_A").document("A").get()
.addOnSuccessListener(docA -> {
List<String> collection_B_uids = docA.get("collection_B_uids");
// ...
for (String uid : collection_B_uids) {
FirebaseFirestore.getInstance().collection("collection_B").document(uid).get()
.addOnSuccessListener(docB -> {
// ...
});
}
});
}
Работает нормально, но затем мне нужно получить доступ к некоторым документам collection_ C с помощью другого атрибута массива в каждом документе collection_B. Я хочу использовать возврат foo
следующим образом:
foo().addOnSuccessListener(...)
И этот окончательный addOnSuccessListener
должен быть выполнен после того, как все вложенные задачи будут выполнены. Я уже использую Tasks.whenAllSuccess
внутри основной Задачи, но это не сработало.
Мои предположения:
a) создайте рекурсивную функцию, используя одновременно 2 слушателя;
b) используйте continueWithTask
или continueWith
(предпочтительно);
c) создайте глобальный AsyncTask
, затем используйте Tasks.await
(пожалуйста, не надо).
Ps: я не английский sh родной