【发布时间】:2018-11-15 08:14:14
【问题描述】:
这是我的代码。成功返回false,因为文档长度为0。
var sucess = await Firestore.instance.runTransaction((transaction) async {
await transaction.set(userReference, userMap);
}).then((_) {
return Firestore.instance.collection(CollectionName.user).where(FirebaseUserField.uid, isEqualTo: userMap["uid"]).getDocuments();
}).then((querySnapshot) {
if (querySnapshot.documents.length == 0) {
return false;
}
return true;
}).catchError((e) {
print(e);
return false;
});
这段代码进入我的第二个未来,我在数据库中查询我刚刚使用先前事务更新的用户。 我想将所有内容与期货链接起来,以简化错误检查。
从 Firestore 文档中,我可以看到处理程序解析为事务的返回值,但调用事务的实例解析为空映射。
runTransaction((Transaction) → Future<dynamic> transactionHandler, {Duration timeout: const Duration(seconds: 5)}) → Future<Map<String, dynamic>>
事务完成后调用下一个future的正确方法是什么,或者如果失败则进入错误。
需要考虑的一点是,当我使用查询用户的断点进行调试时,会出现延迟,但我会正确获取用户。
用户也已正确写入我的数据库。
编辑:我也试过了
var sucess = await Firestore.instance.runTransaction((transaction) async {
return transaction.set(userReference, userMap);
})
但是没有用。
【问题讨论】:
标签: firebase google-cloud-firestore flutter