第一次使用 Dart 流。在下面的代码中,在 VSCODE 中单步执行时,会从转换结果跳转到最后的括号。它似乎没有执行任何监听回调。我该如何解决这个问题?
Future<void> addListsFileToDb(File file) async {
file.openRead().transform(utf8.decoder).listen(
(String value) => print(value),
onError: (error) => print(error),
onDone: () => print("done"));}
最佳答案
流(如 future )是异步的。当您调用 listen
,您告诉流开始工作,并设置一些回调以在流具有可用值时被调用……然后就完成了。
稍后,根据流在做什么,可能更晚,流将生成它的第一个值。此时它将生成一个数据事件,该事件将调用数据回调/处理程序(此处为 (String value) => print(value)
)。
在那之前,程序继续正常执行,所以跳到 listen
的末尾。立即调用是正确且预期的行为,listen
call 立即完成,还没有调用任何回调。
关于Dart 流监听未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64348381/