等待而不将功能声明为异步

时间:2019-02-11 14:57:00

标签: asynchronous dart language-design

实际上,在Dart中,为了在函数体中使用table_name new_topic table_name new_comment table_name ,需要将整个函数声明为SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'new_%' AND TABLE_TYPE = 'BASE TABLE'

await

如果不将async标记为import "dart:async"; void main() async { var x = await funcTwo(); print(x); } funcTwo() async { return 42; } ,此代码将无法工作

main()

但是,文档说:“ async表达式计算Error: Unexpected token 'await'. ,然后暂停当前运行的函数,直到结果准备好,即直到Future完成为止。 ”(Dart Language Asynchrony Support

那么,也许我错过了一些东西,但是没有必要强制功能异步吗?使异步声明成为必需的理由是什么?

2 个答案:

答案 0 :(得分:2)

async中,功能await被重写为使用.then(...)而不是await的代码。

async修饰符将这样的功能标记为必须重写的功能,并且支持await

没有async,您将不得不写

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

这是一个非常简单的示例,但是如果使用更多的异步功能,例如try / catchawait for(...),...

答案 1 :(得分:0)

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