考虑以下示例:
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 次 |
| 最近记录: |