非常感谢如何追踪这个问题,因为我的想法不多了。
我正在调用下面的函数 getOrderCollection,但它在第一行 var myCompanyDoc = await FirebaseFirestore.instance.collection('companies').doc(myCompany).get();
之后中止,没有向控制台发送任何内容或在调试时跳转到某个库。当我点击 next 语句时,它会跳回调用函数。
我通过了数据库的身份验证,companyCollection = FirebaseFirestore.instance.collection('companies')
提供了一个指向集合的初始化对象,而 myCompany 是一个常量,其中包含通过复制/粘贴输入的文档 ID。
如果数据库有一些规则,但我在监视器上看不到成功或拒绝的查询。
有什么想法可以追踪问题吗?
Future<void> getOrderCollection() async {
var myCompanyDoc = await FirebaseFirestore.instance.collection('companies').doc(myCompany).get();
print("companyDoc fetched");
final myDeliveryDocRef = myCompanyDoc.data()['delivery'].toString();
orderCollection = FirebaseFirestore.instance.collection('companies').doc(myCompany).collection('features').doc(myDeliveryDocRef).collection('orders');
orderBriefDoc = FirebaseFirestore.instance.collection('companies').doc(myCompany).collection('features').doc(myDeliveryDocRef);
}
更新:这是集合 > 文档对应于 final String myCompany = '4U4kZKXkr3rHA6B04S5K';
答案 0 :(得分:2)
通常,您希望进行一些错误处理并输入已知类型/类(避免使用 var
)。
async/await
将代码放在 try/catch
中。根据您的设置,您可以将鼠标悬停在 Firestore.instance.collection(...).doc(...)
上以查看返回类型。 .doc(...).get()
返回 DocumentSnapshot
,.collection(...).get()
返回 CollectionSnapshot
。
使用上面的,应该更容易调试:
Future<void> getOrderCollection() async {
try {
DocumentSnapshot myCompanyDoc = await FirebaseFirestore.instance.collection('companies').doc(myCompany).get();
print("companyDoc fetched");
final myDeliveryDocRef = myCompanyDoc.data()['delivery'].toString();
} catch(e) {
print('Error: ' + e.toString());
}
}
不要忘记await
您的其他 2 个 Firestore 查询。
答案 1 :(得分:2)
正如我们在您的评论中所讨论的,问题是您忘记await
getOrderCollection()
函数。尽管正如您所提到的,您的调用方函数 _deliveryRepository.initRepository()
已被等待,但您仍然必须在调用方方法中 await getOrderCollection()
以确保代码在等待 getOrderCollection()
之前执行它继续到下一行。