1

为什么 dart 在 Step2 之后调用我的函数“aFunction”?如果我在控制台中执行此代码,则以下文本:

步骤 2 步骤 1

我的代码:

void main()
{
 ...
 stream.listen(aFunction);
 print("Step2");
 ...
}

void aFunction()
{
 print("Step1");
}

感谢帮助。

4

2 回答 2

3

Dart Stream 做出的少数承诺之一是它不会生成任何事件来响应监听调用。事件可能会在稍后发生,但调用“listen”的代码可以在第一个事件被触发之前继续并完成。我们最初允许流在监听时立即触发,但是当我们尝试使用它进行编程时,在实践中完全无法控制。

听未来也是如此,例如使用“then”。回调永远不会立即到来。

事件通常应该像由顶级事件循环触发一样,因此事件处理程序不必担心其他代码是否正在运行 - 其他可能不可重入的代码。

在实践中并非总是如此。一个事件处理程序可以通过同步流控制器触发其他事件,有效地将一个事件变成另一个事件。这需要事件处理程序知道它在做什么。同步控制器是供内部使用的,例如流转换器,一般不推荐使用同步流控制器。

所以,不,你不能让监听调用立即触发回调。

于 2014-02-13T14:55:45.213 回答
0

You can listen to a stream synchronously if you created a StreamController with the sync option enabled. Here is an example to get what you describe:

var controller = new StreamController<String>(sync: true);
var stream = controller.stream.asBroadcastStream();
stream.listen((text) => print(text));
controller.add("Step1");
print("Step2");
于 2014-10-03T21:42:04.567 回答