Вот мой код.успех возвращается 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>>
Как правильно вызвать следующее будущее после завершения транзакции или перейти к ошибке в случае сбоя.
Следует учитывать, что при отладке с точкой останова, когда я запрашиваю пользователя, поэтому возникает задержка, я правильно получаю пользователя.
Также пользователь правильно записывается в мою базу данных.
РЕДАКТИРОВАТЬ: Я также пытался
var sucess = await Firestore.instance.runTransaction((transaction) async {
return transaction.set(userReference, userMap);
})
, но это не сработало.