考虑以下示例:
Future<int> doAsyncThing() => new Future.value(42);
usingAsync() async => doAsyncThing();
main() {
var thing = usingAsync();
// what is the runtimeType of thing ?
}
Run Code Online (Sandbox Code Playgroud)
返回的对象的runtimeType是什么usingAsync()
?是Future<Future<int>>
还是Future<int>
其他?
从usingAsync()
技术上讲,返回类型是dynamic
因为没有为给出返回类型注释usingAsync()
。省略返回类型注释与使用dynamic
返回类型注释相同。
返回的对象的runtimeType usingAsync()
是Future<dynamic>
。标记为async
简单的函数总是返回一个Future<dynamic>
对象。
当Future from usingAsync()
完成时,它将“拉平”其包含的Future,并以结束int
。
import 'dart:async';
Future<int> doAsyncThing() => new Future.value(42);
usingAsync() async => doAsyncThing();
main() {
var thing = usingAsync();
// what is the runtimeType of thing ?
print(thing.runtimeType); // Future
thing.then((value) {
print(value); // 42
print(value.runtimeType); // int
});
}
Run Code Online (Sandbox Code Playgroud)
原始问题中的代码示例的作者可能想编写:
Future<int> usingAsync() async => await doAsyncThing();
Run Code Online (Sandbox Code Playgroud)
或者,甚至更清洁:
Future<int> usingAsync() => doAsyncThing();
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您的函数返回了Future,则可能不需要将函数标记为异步。只是返回未来。
实际观看:https : //dartpad.dartlang.org/73fed0857efab196e3f9
归档时间: |
|
查看次数: |
814 次 |
最近记录: |