当我从Dart中标记为async的函数返回Future时会发生什么?
考虑这个例子:当我从Dart中标记为async的函数返回Future时会发生什么?,dart,dart-async,Dart,Dart Async,考虑这个例子: Future<int> doAsyncThing() => new Future.value(42); usingAsync() async => doAsyncThing(); main() { var thing = usingAsync(); // what is the runtimeType of thing ? } Future-doasynchthing()=>新的Future.value(42); usingAsync()异步
Future<int> doAsyncThing() => new Future.value(42);
usingAsync() async => doAsyncThing();
main() {
var thing = usingAsync();
// what is the runtimeType of thing ?
}
Future-doasynchthing()=>新的Future.value(42);
usingAsync()异步=>doAsyncThing();
main(){
var thing=usingAsync();
//运行时类型是什么?
}
usingAsync()返回的对象的运行时类型是什么?它是Future
还是Future
还是其他什么?usingAsync()
的返回类型在技术上是动态的,因为没有为usingAsync()
提供返回类型注释。省略返回类型注释与对返回类型注释使用dynamic
相同
usingAsync()
返回的对象的运行时类型为Future
。标有async
的函数总是简单地返回Future
对象
当来自usingAsync()
的未来完成时,它将“展平”其包含的未来,并以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
});
}
导入'dart:async';
Future-doAsyncThing()=>新的Future.value(42);
usingAsync()异步=>doAsyncThing();
main(){
var thing=usingAsync();
//运行时类型是什么?
打印(thing.runtimeType);//未来
然后((价值){
打印(值);//42
打印(value.runtimeType);//int
});
}
原始问题中代码示例的作者可能想写:
Future<int> usingAsync() async => await doAsyncThing();
Future usingAsync()async=>wait doasynchThing();
或者,甚至更干净:
Future<int> usingAsync() => doAsyncThing();
Future usingAsync()=>doasynchthing();
也就是说,如果函数返回一个Future,则可能不需要将函数标记为async。只要回到未来
看看它的作用:第二个版本“Future usingAsync()=>doAsyncThing();”会自动等待吗?那么Future doAsyncThing()async=>new Future.value(42)之间的区别是什么
和未来doasynchthing()=>新的Future.value(42)代码>?完全一样吗?