假设我们有以下方法:
Future<String> foo(void callback()) async{
...
callback();
...
}然后,回调在定义时允许为同步或异步。如果是异步的,是否有一种干净的方法来等待?现在,如果我在这里等待它,我会收到IDE的警告:
的“等待”应用于“空虚”,这不是“未来”
发布于 2020-09-11 09:15:37
使async函数返回void而不是Future<void>的全部意义是使函数成为“触发和遗忘”,这样调用方就不能等待它完成。
如果您希望允许您的foo函数以异步函数作为参数,那么它的参数应该是Future<void> Function()。这样,调用方就可以轻松地使用异步包装器来调整同步函数。(不可能发生相反的情况。)
或者,您可以使callback参数返回一个FutureOr<void>
Future<String> foo(FutureOr<void> Function callback) async {
...
await callback();
...
}或者,如果await是同步的,则不需要不必要的callback:
Future<String> foo(FutureOr<void> Function callback) async {
...
if (callback is Future<void> Function) {
await callback();
} else {
callback();
}
...
}https://stackoverflow.com/questions/63843646
复制相似问题