首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dart -区分同步和异步无效回调

Dart -区分同步和异步无效回调
EN

Stack Overflow用户
提问于 2020-09-11 08:41:16
回答 1查看 272关注 0票数 0

假设我们有以下方法:

代码语言:javascript
运行
复制
Future<String> foo(void callback()) async{
    ...
    callback();
    ...
}

然后,回调在定义时允许为同步或异步。如果是异步的,是否有一种干净的方法来等待?现在,如果我在这里等待它,我会收到IDE的警告:

的“等待”应用于“空虚”,这不是“未来”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-11 09:15:37

使async函数返回void而不是Future<void>的全部意义是使函数成为“触发和遗忘”,这样调用方就不能等待它完成。

如果您希望允许您的foo函数以异步函数作为参数,那么它的参数应该是Future<void> Function()。这样,调用方就可以轻松地使用异步包装器来调整同步函数。(不可能发生相反的情况。)

或者,您可以使callback参数返回一个FutureOr<void>

代码语言:javascript
运行
复制
Future<String> foo(FutureOr<void> Function callback) async {
    ...
    await callback();
    ...
}

或者,如果await是同步的,则不需要不必要的callback

代码语言:javascript
运行
复制
Future<String> foo(FutureOr<void> Function callback) async {
    ...
    if (callback is Future<void> Function) {
      await callback();
    } else {
      callback();
    }
    ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63843646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档