实际上,在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)
那么,也许我错过了一些东西,但是没有必要强制功能异步吗?使异步声明成为必需的理由是什么?
答案 0 :(得分:2)
在async
中,功能await
被重写为使用.then(...)
而不是await
的代码。
async
修饰符将这样的功能标记为必须重写的功能,并且支持await
。
没有async
,您将不得不写
void main() {
return funcTwo().then((x) {
print(x);
});
}
这是一个非常简单的示例,但是如果使用更多的异步功能,例如try
/ catch
,await for(...)
,...
答案 1 :(得分:0)
一个问题是await
最初不是Dart语言的一部分。为了保持与可能使用await
作为标识符的现有程序的向后兼容性,语言设计人员添加了一种机制来显式选择使用新的await
关键字:通过添加(先前无效的)构造声明函数async
。