代码之家  ›  专栏  ›  技术社区  ›  ts.

等待而不将函数声明为Async

  •  2
  • ts.  · 技术社区  · 6 年前

    实际上在飞镖里,为了使用 await 在函数体中,需要将整个函数声明为 async :

    import "dart:async";
    
    void main()  async {
      var x = await funcTwo();
      print(x);  
    }
    
    funcTwo() async {
      return 42;
    }
    

    没有标记这个代码就不能工作 main() 作为 异步的

    Error: Unexpected token 'await'. 
    

    但是,医生说 等待 表达式计算 e 然后 吊挂 当前正在运行的函数,直到结果就绪,也就是说,直到将来完成“,( Dart Language Asynchrony Support )

    所以,也许我错过了一些东西,但不需要强制函数是异步的吗?使异步声明成为必需的理由是什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Günter Zöchbauer    6 年前

    async 功能 await 重写为代码 .then(...) 使用而不是 等待 .

    这个 异步的 修饰符将这样一个函数标记为必须重写的函数,并用它 等待 支持。

    没有 异步的 你得写

    void main() {
      return funcTwo().then((x) {
        print(x);  
      });
    }
    

    这是一个非常简单的例子,但是当使用更多的异步特性时,重写可能相当复杂,比如 try / catch , await for(...) ,…

        2
  •  0
  •   jamesdlin    6 年前

    一个问题是 await 最初不是DART语言的一部分。保持与可能使用的现有程序的向后兼容性 等待 作为一个标识符,语言设计者添加了一个机制来显式地选择使用新的 等待 关键字:通过添加(以前无效的)构造来声明函数 async .