firestore 和 wait 中的链式查询如何检索数据

我想在firestore. 在获取另一个集合中的其他信息之前,我需要一些关于一个集合的信息。


我已经尝试使用Tasks.whenall()...但效率不高。我也尝试使用callBack。


这是我的第一个功能:


public static void getAllFavoris(){

    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

    FirebaseFirestore.getInstance().collection("product").document("favoris").collection(uid).get()

            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

                @Override

                public void onComplete(@NonNull Task<QuerySnapshot> task) {

                    if (task.isSuccessful()) {//task is succesful

                        Log.e("TAG","task succes for fav ");

                        for (QueryDocumentSnapshot document : task.getResult()){//never enter in this loop

                            Log.e("TAG","Doc "+document);

                            Log.e("TAG", "Succes for get all favoris");

                            Log.e("TAG","data for favoris ::: "+document.getId());

                            MainActivity.favorisList.add(document.getId());

                        }

                    }

                    else {

                        Log.d("TAG", "Error getting documents: ", task.getException());

                    }

//call without data retrieve

                    Log.e("TAG","favoris ::: "+showListContentS(MainActivity.favorisList));

                    getProductByTagFound();

                }

            })

            .addOnFailureListener(new OnFailureListener() {

                @Override

                public void onFailure(@NonNull Exception e) {

                    Log.e("TAG","error get All favoris"+e);

                }

            });

}


我需要在循环完成后调用它createFinalList(),还需要进入循环以获取数据并getProductByTag()在之后调用。


回首忆惘然
浏览 77回答 1
1回答

慕后森

如果您想在第一个查询完成后立即执行新查询,则需要等到第一个查询完成。要解决这个问题,您需要使用嵌套查询。换句话说,您需要将第二个查询直接移动到第一个回调的内部onComplete()方法中。这样,只有在第一个查询完成时,才会执行第二个查询。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java