异步等待没有按预期工作,它必须返回我未来的结果
Posted
技术标签:
【中文标题】异步等待没有按预期工作,它必须返回我未来的结果【英文标题】:async await not working as expected, it must return me future result 【发布时间】:2019-08-05 17:00:32 【问题描述】:我的 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 */
谢谢
【问题讨论】:
【参考方案1】:当你用async
标记一个方法时,dart 会隐式返回一个 Future。所以如果你想使用这个方法的结果,你必须再次等待结果。
下面我已经等待了未来,然后以异步方法将其打印出来。因此,我的经验法则始终是等待并像在顺序程序中一样执行您的功能。如果你从一个异步函数返回一个值,你是在告诉 dart 方法执行需要时间,所以在未来包装它并返回结果。
在您的示例中,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
【讨论】:
以上是关于异步等待没有按预期工作,它必须返回我未来的结果的主要内容,如果未能解决你的问题,请参考以下文章
通过节点的异步/等待不需要按预期顺序返回结果 - 使用啥正确模式?