我认为这是一个简单的问题,我有3个主要集合:collection_A,collection_B和collection_C。问题是:我需要collection_A的文档“ A”。文档“ A”包含一个数组属性“ collection_B_uids”,在获取文档“ A”之后,我需要获取collection_B_uids中的每个collection_B文档,因此我这样做了:
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_B的每个文档中的另一个数组属性访问collection_C的某些文档。我想这样使用foo
的返回值:
foo().addOnSuccessListener(...)
最后的addOnSuccessListener
应该在所有嵌套任务完成之后执行。我已经在主要任务中使用了Tasks.whenAllSuccess
,但是没有用。
我的猜测:
a)一次使用2个监听器创建一个递归函数;
b)使用continueWithTask
或continueWith
(首选);
c)创建一个全局AsyncTask
,然后使用Tasks.await
(请不要)。
Ps:我不是英国人