为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2023-03-17 16:46:31
我想在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()在之后调用。
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

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



查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信