dart - 飞镖双点符号等待期货?
问题描述
快速提问,我创建了这个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);
重构在功能上是否等同于原始重构?
解决方案
不,重构不等同于原始。 x..y
评估x
并丢弃任何y
评估结果。在您的情况下,这意味着您丢弃Future
返回的 by writeAsString
,因此不会被await
编辑。如果您希望函数仅在writeAsString
完成后返回,则不能将其与..
.
如果您想避免使用该file
变量,则需要执行以下操作:
return await (await makeFileObject(filename)).writeAsString(content);
但是,我认为原版更具可读性,我会坚持下去。
推荐阅读
- vba - 使用 Excel VBA 将 Word 形状固定在页面上的位置,正是它被粘贴的位置
- vb.net - 为什么选项卡控件中的 DataGridViews 不受我的代码影响?
- java - OpenSAML 2 到 3 迁移,如何进行身份验证重定向?
- c# - 如何使用数据注释实现 0..1:0..1 关系
- unit-testing - 存储库模式和工作单元中的架构问题
- python - 给定一个值,用 Numpy 找到百分位数 %
- html - 角度2中的zip文件上传问题
- swift - 如何检查我的 AVPlayer 是否正在播放、连接或缓冲?
- c# - 最新版本的 MongoC# 驱动程序的聚合函数问题
- r - 删除在某些列中具有所有 NA 的行