飞镖双点符号等待期货?
dart double dot notation awaits futures?
快速提问,我创建了这个 File
对象,使用它向磁盘写入内容,然后 return 从异步函数内部将其写入磁盘,如下所示:
...
File file = await makeFileObject(filename);
return await file.writeAsString(content);
// fyi writeAsString returns Future<File>
但我随后使用 ..
符号重构它,它说它不需要 return
之后的 await
这很奇怪。 ..
是否等待写入?
我是在写入发生之前 return 编辑 File
对象还是 File
对象 return 由 writeAsString
编辑?
...
return (await makeFileObject(filename))
..writeAsString(content);
重构在功能上是否等同于原始重构?
不,重构不等同于原始。 x..y
的计算结果为 x
并丢弃 y
的计算结果。在您的情况下,这意味着您丢弃了 writeAsString
编辑的 Future
return,因此它不会被 await
编辑。如果您希望您的函数仅在 writeAsString
完成后才 return,则不能将其与 ..
.
一起使用
如果你想避免使用 file
变量,你需要这样做:
return await (await makeFileObject(filename)).writeAsString(content);
不过,我认为原文更具可读性,我会坚持下去。
快速提问,我创建了这个 File
对象,使用它向磁盘写入内容,然后 return 从异步函数内部将其写入磁盘,如下所示:
...
File file = await makeFileObject(filename);
return await file.writeAsString(content);
// fyi writeAsString returns Future<File>
但我随后使用 ..
符号重构它,它说它不需要 return
await
这很奇怪。 ..
是否等待写入?
我是在写入发生之前 return 编辑 File
对象还是 File
对象 return 由 writeAsString
编辑?
...
return (await makeFileObject(filename))
..writeAsString(content);
重构在功能上是否等同于原始重构?
不,重构不等同于原始。 x..y
的计算结果为 x
并丢弃 y
的计算结果。在您的情况下,这意味着您丢弃了 writeAsString
编辑的 Future
return,因此它不会被 await
编辑。如果您希望您的函数仅在 writeAsString
完成后才 return,则不能将其与 ..
.
如果你想避免使用 file
变量,你需要这样做:
return await (await makeFileObject(filename)).writeAsString(content);
不过,我认为原文更具可读性,我会坚持下去。