async await 没有按预期工作,它必须 return 我未来的结果
async await not working as expected, it must return me future result
我的 Future & Then 代码运行完美。见下文:
/*main is the entry point of code*/
void main() {
var futureObject = getPostFromServer();
printPost(futureObject);
}
getPostFromServer(){
var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};
var futureObject = Future.delayed(duration, computation);
return futureObject;
}
printPost(var futureObject){
futureObject.then(
(actualString){
print(actualString);
}
);
}
/*
OUTPUT
You will get it in future
*/
但是,当我尝试使用 async & wait 进行相同操作时,我无法获得相同的输出。
Instance of '_Future<dynamic>'
为什么我不能得到未来的价值?
/*main is the entry point of code*/
void main() {
var futureObject = getPostFromServer();
printPost(futureObject);
}
getPostFromServer() async {
var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};
var futureObject = await Future.delayed(duration, computation);
return futureObject;
}
printPost(var futureObject){
print(futureObject);
}
/*
OUTPUT
start
Instance of '_Future<dynamic>'
end */
谢谢
当你用 async
标记一个方法时,dart 会 return 隐式地给你一个 Future 。所以如果你想使用这个方法的结果,你必须再次等待结果。
下面我已经等待了未来,然后用异步方法打印了它。所以我的经验法则是始终等待并像在顺序程序中一样执行您的功能。如果您 return 来自异步函数的值,您是在告诉 dart 该方法需要时间执行,因此将其包装在将来 return 结果。
在您的示例中,getPostFromServer() 在您的客户端代码中充当迷你服务器,而 printPost() 充当应等待然后读取结果的子客户端。 async
和 await
在服务器端和客户端同样重要。唯一的区别是我们如何使用它。 :)
void main() {
var futureObject = getPostFromServer();
printPost(futureObject);
}
getPostFromServer() async {
var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};
var futureObject = await Future.delayed(duration, computation);
return futureObject;
}
printPost(var futureObject) async {
print(await futureObject);
}
dartpad 中的相同代码:
https://dartpad.dartlang.org/59610dc768e232ac5a8e724f7fe0eee6
我的 Future & Then 代码运行完美。见下文:
/*main is the entry point of code*/
void main() {
var futureObject = getPostFromServer();
printPost(futureObject);
}
getPostFromServer(){
var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};
var futureObject = Future.delayed(duration, computation);
return futureObject;
}
printPost(var futureObject){
futureObject.then(
(actualString){
print(actualString);
}
);
}
/*
OUTPUT
You will get it in future
*/
但是,当我尝试使用 async & wait 进行相同操作时,我无法获得相同的输出。
Instance of '_Future<dynamic>'
为什么我不能得到未来的价值?
/*main is the entry point of code*/
void main() {
var futureObject = getPostFromServer();
printPost(futureObject);
}
getPostFromServer() async {
var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};
var futureObject = await Future.delayed(duration, computation);
return futureObject;
}
printPost(var futureObject){
print(futureObject);
}
/*
OUTPUT
start
Instance of '_Future<dynamic>'
end */
谢谢
当你用 async
标记一个方法时,dart 会 return 隐式地给你一个 Future 。所以如果你想使用这个方法的结果,你必须再次等待结果。
下面我已经等待了未来,然后用异步方法打印了它。所以我的经验法则是始终等待并像在顺序程序中一样执行您的功能。如果您 return 来自异步函数的值,您是在告诉 dart 该方法需要时间执行,因此将其包装在将来 return 结果。
在您的示例中,getPostFromServer() 在您的客户端代码中充当迷你服务器,而 printPost() 充当应等待然后读取结果的子客户端。 async
和 await
在服务器端和客户端同样重要。唯一的区别是我们如何使用它。 :)
void main() {
var futureObject = getPostFromServer();
printPost(futureObject);
}
getPostFromServer() async {
var duration = Duration(seconds : 5);
var computation = (){
return "You will get it in future" ;
};
var futureObject = await Future.delayed(duration, computation);
return futureObject;
}
printPost(var futureObject) async {
print(await futureObject);
}
dartpad 中的相同代码:
https://dartpad.dartlang.org/59610dc768e232ac5a8e724f7fe0eee6