异步等待未按预期工作,它必须返回我将来的结果

时间:2019-08-05 17:00:32

标签: flutter dart dart-async

我与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
*/

但是,当我尝试使用异步并等待相同的内容时,却无法获得相同的输出。

    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    */

谢谢

1 个答案:

答案 0 :(得分:1)

当您用async标记方法时,dart将隐式返回Future。因此,如果要使用此方法的结果,则必须再次等待结果。

下面,我等待着未来,然后以异步方法将其打印出来。因此,我的经验法则总是在等待,并像在顺序程序中一样执行功能。如果您从异步函数返回一个值,则表示dart方法需要花费时间才能执行,因此请在将来包装它并返回结果。

在您的示例中,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

相关问题