gpt4 book ai didi

dart - 当我从 Dart 中标记为异步的函数返回 Future 时会发生什么?

转载 作者:行者123 更新时间:2023-12-04 18:37:02 25 4
gpt4 key购买 nike

考虑这个例子:

Future<int> doAsyncThing() => new Future.value(42);

usingAsync() async => doAsyncThing();

main() {
var thing = usingAsync();
// what is the runtimeType of thing ?
}
usingAsync()返回的对象的runtimeType是什么? ?会不会是 Future<Future<int>>Future<int>或者是其他东西 ?

最佳答案

usingAsync()的返回类型技术上是 dynamic因为没有为 usingAsync() 给出返回类型注释.省略返回类型注释与使用 dynamic 相同对于返回类型注释。
usingAsync()返回的对象的runtimeType是 Future<dynamic> .标有 async 的函数总是返回一个 Future<dynamic>目的。

当 future 来自 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
});
}

原始问题中代码示例的作者可能想写:
Future<int> usingAsync() async => await doAsyncThing();

或者,甚至更清洁:
Future<int> usingAsync() => doAsyncThing();

也就是说,如果您的函数返回 Future,您可能不需要将您的函数标记为异步。只需返回 future 。

看看它在行动: https://dartpad.dartlang.org/73fed0857efab196e3f9

关于dart - 当我从 Dart 中标记为异步的函数返回 Future 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com