【问题标题】:Is there a difference whether using await with return in Dart?在 Dart 中使用 await 和 return 有区别吗?
【发布时间】:2021-02-23 01:15:23
【问题描述】:

在我的颤振项目中,假设有一个foo(int x) async 函数。 bar() async 看起来像:

Future bar() async {
  return foo(3);
}

bar() 函数只是带有特定参数的foo(int x) 的简单封装。而bar()FutureBuilder 中用作future

我不确定是否应该使用await 来返回。我在网上找不到相关文件。那么return foo(3)return await foo(3) 有什么区别呢?谢谢!

【问题讨论】:

    标签: flutter asynchronous dart async-await


    【解决方案1】:

    没什么区别。

    从技术上讲,首先使用await 可能会在从函数返回之前等待Future 解析,但您将无法区分。

    Future 以任一方式返回。

    那里的async也没用,还不如只是一个箭头:

    Future bar() => foo(3);
    

    如果它不是最后一个语句,并且是一个 return 语句,这可能很重要,正如 cmets 中所指出的,采取以下措施:

    Future bar() async {
        try {
            return await foo(3);
        } catch(error) {
            return baz;
        }
    }
    

    如果 foo 拒绝,那么这很重要,因为它将由被调用者处理,而不是调用者。

    【讨论】:

    • 如果await抛出异常怎么办?
    • @user2864740 如果是直接的return,调用者会处理它。如果是另一个职位,那肯定很重要。更新示例以显示这一点。
    【解决方案2】:

    由于您要返回 Future,在这种情况下,即使您不等待它,foo(3) 也会返回 Future,而这正是您的函数想要返回的东西。如果你在那里等待它,那么它将在函数中等待,然后返回值。

    如果 foo 返回 Future,在这种情况下你甚至不需要等待。然后 bar 的调用者将改为等待 bar。

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 2016-12-07
      • 2017-07-25
      • 2018-02-22
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多