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

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() 充当应等待然后读取结果的子客户端。 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

【讨论】:

以上是关于异步等待没有按预期工作,它必须返回我未来的结果的主要内容,如果未能解决你的问题,请参考以下文章

通过节点的异步/等待不需要按预期顺序返回结果 - 使用啥正确模式?

颤振异步等待未按预期工作

在 ExpressJS 响应中返回异步等待 try/catch 抛出错误 [重复]

模型没有返回预期的结果

阻塞非阻塞同步异步

Promise.all 和 .map 函数的异步/等待无法按预期工作