我正在尝试使用异步方法,但我遇到了困难。
我想实现一些代码,其目标是在等待2秒后返回一个字符串。
这是我的第一次尝试和相关的错误
String setUserDecision() {
return 'Yes';
}
Future<String> fetchUserDecision() async {
return await Future.delayed(const Duration(seconds: 2), setUserDecision());
}
Future<void> main() async {
print("Fetching user role...");
String decision = await fetchUserDecision();
print('The user decision is: $decision');
print("Done");
}
Error: The argument type 'String' can't be assigned to the parameter type 'FutureOr<String> Function()?'.
return await Future.delayed(const Duration(seconds: 2), setUserDecision());
我不能理解这个错误,我可能认为String类型不对,但我不明白如何改变它。我也尝试了这个解决方案,认为它可能有意义(也许),但什么都没有。
Future<String> setUserDecision() async{
return await 'Yes';
}
Future<String> fetchUserDecision() async {
return await Future.delayed(const Duration(seconds: 2), setUserDecision());
}
Future<void> main() async {
print("Fetching user role...");
String decision = await fetchUserDecision();
print('The user decision is: $decision');
print("Done");
}
还有这个
import 'dart:async';
String setUserDecision() {
return 'Yes';
}
Future<String> fetchUserDecision() async {
return await Future.delayed(const Duration(seconds: 2), setUserDecision() as FutureOr<String> Function()?);
}
Future<void> main() async {
print("Fetching user role...");
String decision = await fetchUserDecision();
print('The user decision is: $decision');
print("Done");
}
这个错误
_CastError (type 'String' is not a subtype of type '(() => FutureOr<String>)?' in type cast)
唯一可行的办法就是这个
Future<String> fetchUserDecision() async {
return await Future.delayed(const Duration(seconds: 2), () {
return 'Yes';
});
}
Future<void> main() async {
print("Fetching user role...");
String decision = await fetchUserDecision();
print('The user decision is: $decision');
print("Done");
}
但我想更好地了解错误的类型以及如何修复它。
1条答案
按热度按时间8fsztsew1#
你的问题是,你正在调用你的
setUserDecision()
函数,并将其结果发送给Future.delayed
,而Future.delayed
需要一个函数。由于调用setUserDecision()
的结果是String
,你最终提供的是String
而不是Function
,这让Dart抱怨。你应该这样做:
注意,我已经删除了
setUserDecision
后面的()
。现在我们将函数作为函数提供,而不是调用它。