为什么dart在Step2之后调用我的函数“aFunction”?如果我在下面的控制台中执行此代码:
第二步 第一步:
我的代码:
void main()
{
...
stream.listen(aFunction);
print("Step2");
...
}
void aFunction()
{
print("Step1");
}
感谢您的帮助。
答案 0 :(得分:2)
Dart Stream提供的少数承诺之一是它不会响应listen调用而生成任何事件。 这些事件可能会在以后发生,但在第一个事件被触发之前,允许调用“listen”的代码继续并完成。 我们最初允许流在听取时立即触发,但是当我们尝试使用它进行编程时,在实践中完全无法控制。
聆听未来也是如此,例如'then'。回调永远不会立即发生。
事件通常应该像顶级事件循环一样触发,因此事件处理程序不必担心其他代码是否正在运行 - 其他代码可能不是可重入的。
在实践中并非总是如此。一个事件处理程序可以通过同步流控制器触发其他事件,从而有效地将一个事件转换为一个事件。这需要事件处理程序知道它在做什么。同步控制器用于内部使用,例如流变换器,并且通常不推荐使用同步流控制器。
所以,不,你不能让listen电话立即触发回调。
答案 1 :(得分:0)
如果您在启用了同步选项的情况下创建了StreamController,则可以同步收听流。以下是获得您所描述内容的示例:
var controller = new StreamController<String>(sync: true);
var stream = controller.stream.asBroadcastStream();
stream.listen((text) => print(text));
controller.add("Step1");
print("Step2");