首页 > 解决方案 > 飞镖双点符号等待期货?

问题描述

快速提问,我创建了这个File对象,使用它将内容写入磁盘,然后从异步函数内部返回它,如下所示:

...
File file = await makeFileObject(filename);
return await file.writeAsString(content); 
// fyi writeAsString returns Future<File>

但后来我使用..符号重构了它,它说它不需要await后面return

这很奇怪。..等待写吗?

我是File在写入发生之前返回对象还是File返回的对象writeAsString

...
return (await makeFileObject(filename))
    ..writeAsString(content);

重构在功能上是否等同于原始重构?

标签: dartsyntaxrefactoring

解决方案


不,重构不等同于原始。 x..y评估x并丢弃任何y评估结果。在您的情况下,这意味着您丢弃Future返回的 by writeAsString,因此不会被await编辑。如果您希望函数仅在writeAsString完成后返回,则不能将其与...

如果您想避免使用该file变量,则需要执行以下操作:

return await (await makeFileObject(filename)).writeAsString(content);

但是,我认为原版更具可读性,我会坚持下去。


推荐阅读