关于在dart中使用期货,我有几个问题。假设我正在使用Firestore,并且具有这样的功能来更新用户的信息:
listOfCountries[0].CountryCode = "AUS"
}
我的问题是:由于runTransaction是Future,它是否需要返回Future。没有它似乎可以正常工作,但是对我来说,它应该返回一个“ Future void”,以便在我使用它时可以等待updateOldUser。但是当我把它变成“未来的虚空”,然后用“ return”结束函数体时;我说“返回后预期值”时出错。 但是我真的不明白,是用另一个类似的代码:
void updateOldUser(User oldUser,String newInfo){
DocumentReference userToUpdateRef = userRef.document(oldUser.id);
Firestore.instance.runTransaction((Transaction transaction) async {
DocumentSnapshot userToUpdateSnapshot = await transaction.get(userToUpdateRef);
if(userToUpdateSnapshot.exists){
await transaction.update(
userToUpdateSnapshot.reference, userToUpdateSnapshot.data[newInfo] + 1
).catchError((e)=> print(e));
}
});
}
我没有收到此错误,它也可以正常工作。为什么呢预先感谢。
答案 0 :(得分:1)
是否需要返回未来
如果您希望调用方能够等待函数完成,则返回类型应该为Future<...>
(如果没有具体的返回值,则返回类型应为Future<void>
或{{1} },如果结果是整数值,...)
对于即弃即用Future<int>
函数,您可以使用async
,但这很少见。
如果返回类型为void
,则呼叫者仍然可以决定不等待完成。
但是当我将其转换为“ Future void”,然后以“ return;”结束函数主体时
如果使用Future<...>
,则在方法末尾隐式返回async
。
如果您不不使用Future
,则需要返回async
,如
Future