飞镖双点符号等待期货?

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);

不过,我认为原文更具可读性,我会坚持下去。