首页 > 解决方案 > Android 和 Firebase Firestore:等待嵌套任务完成

问题描述

我认为这是一个简单的问题,我有 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(...)

并且该 finaladdOnSuccessListener应该在所有嵌套任务完成后执行。我已经Tasks.whenAllSuccess在主任务中使用了,但是没有用。

我的猜测:

a) 一次使用 2 个监听器创建一个递归函数;

b) 使用continueWithTaskcontinueWith(首选);

c)创建一个全局AsyncTask然后使用Tasks.await(请不要)。

ps:我不是英语母语

标签: androidfirebasegoogle-cloud-firestoretask

解决方案


推荐阅读