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() 充当应等待然后读取结果的子客户端。 asyncawait 在服务器端和客户端同样重要。唯一的区别是我们如何使用它。 :)

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