Asynchronous 颤振:关于未来和异步函数的问题
关于在dart中使用期货,我有几个问题。假设我正在使用firestore,我有这样一个功能来更新用户的信息:Asynchronous 颤振:关于未来和异步函数的问题,asynchronous,dart,flutter,google-cloud-firestore,future,Asynchronous,Dart,Flutter,Google Cloud Firestore,Future,关于在dart中使用期货,我有几个问题。假设我正在使用firestore,我有这样一个功能来更新用户的信息: void updateOldUser(User oldUser,String newInfo){ DocumentReference userToUpdateRef = userRef.document(oldUser.id); Firestore.instance.runTransaction((Transaction transaction) async { DocumentSnap
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));
}
});
}
我的问题是:既然runTransaction是future,它是否需要返回future。如果没有它,它似乎可以正常工作,但对我来说,它应该返回一个“未来的空白”,以便在我使用它时能够等待UpdateLDUser。但当我把它变成一个“未来的空白”,然后用“return;”结束函数体时我有一个错误,说“返回后需要一个值”。
但我真正不明白的是,使用另一个类似的代码:
Future<void> updateUserPhoto(User user,File userPhoto) async {
String photoUrl = await uploadImage(user.id,userPhoto);
DocumentReference userToUpdateRef = userRef.document(user.id);
Firestore.instance.runTransaction((Transaction transaction) async {
DocumentSnapshot userToUpdateSnapshot = await transaction.get(userToUpdateRef);
if(userToUpdateSnapshot.exists){
await transaction.update(
userToUpdateSnapshot.reference, {
'photoUrl' : photoUrl
}
).catchError((e)=> print(e));
}
});
return;
Future updateUserPhoto(用户用户,文件用户照片)异步{
字符串photoUrl=wait uploadImage(user.id,userPhoto);
DocumentReference userToUpdateRef=userRef.document(user.id);
Firestore.instance.runTransaction((事务)异步{
DocumentSnapshot userToUpdateSnapshot=等待事务.get(userToUpdateRef);
如果(userToUpdateSnapshot.exists){
等待事务处理。更新(
userToUpdateSnapshot.reference{
“photoUrl”:photoUrl
}
).catchError((e)=>打印(e));
}
});
返回;
}
我没有得到这个错误,它的工作也很好。为什么?提前谢谢
它需要回归未来吗
如果希望调用者能够等待函数完成,则返回类型应为Future
(如Future
如果没有具体的返回值,或Future
如果结果为整数值,…)
对于fire-and-forgetasync
函数,可以使用void
,但这种情况并不常见。
如果返回类型是Future
,调用方仍然可以决定不等待完成
但当我把它变成一个“未来的空白”,然后用“return;”结束函数体时
如果使用async
,则在方法末尾隐式返回Future
如果不使用async
,则需要返回一个未来的,如
return doSomething.then((v) => doSomethingElse());
它需要回归未来吗
如果希望调用者能够等待函数完成,则返回类型应为Future
(如Future
如果没有具体的返回值,或Future
如果结果为整数值,…)
对于fire-and-forgetasync
函数,可以使用void
,但这种情况并不常见。
如果返回类型是Future
,调用方仍然可以决定不等待完成
但当我把它变成一个“未来的空白”,然后用“return;”结束函数体时
如果使用async
,则在方法末尾隐式返回Future
如果不使用async
,则需要返回一个未来的,如
return doSomething.then((v) => doSomethingElse());