Flutter:关于期货和异步功能的问题

时间:2019-02-28 12:44:25

标签: asynchronous dart flutter google-cloud-firestore future

关于在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));
  }
});

}

我没有收到此错误,它也可以正常工作。为什么呢预先感谢。

1 个答案:

答案 0 :(得分:1)

  

是否需要返回未来

如果您希望调用方能够等待函数完成,则返回类型应该为Future<...>(如果没有具体的返回值,则返回类型应为Future<void>或{{1} },如果结果是整数值,...)

对于即弃即用Future<int>函数,您可以使用async,但这很少见。 如果返回类型为void,则呼叫者仍然可以决定不等待完成。

  

但是当我将其转换为“ Future void”,然后以“ return;”结束函数主体时

如果使用Future<...>,则在方法末尾隐式返回async

如果您不使用Future,则需要返回async,如

Future