【问题标题】:How does the listen method of a stream show data that has been added through a sink AFTER the listen method was called?在调用listen方法之后,流的listen方法如何显示通过sink添加的数据?
【发布时间】:2019-04-17 12:45:52
【问题描述】:

我正在研究流的概念和实际用途(虽然非常基础),我发现下面的代码在调用 listen 方法之后通过接收器添加数据。那么作为参数传递给listen的函数是否会不断重复,直到我们的程序结束?

我尝试在每次 sink.add 调用之间暂停程序几秒钟,但控制台一次打印了整个数据...我仍在尝试了解整个概念的工作原理。

void main() {

  //
  // Initialize a "Single-Subscription" Stream controller
  //

  final StreamController ctrl = StreamController();

  //
  // Initialize a single listener which simply prints the data
  // as soon as it receives it
  //

  final StreamSubscription subscription = ctrl.stream.listen((data) => print('$data'));

  //
  // We here add the data that will flow inside the stream
  //

  ctrl.sink.add('my name');
  ctrl.sink.add(1234);
  ctrl.sink.add({'a': 'element A', 'b': 'element B'});
  ctrl.sink.add(123.45);

  //
  // We release the StreamController
  //
  ctrl.close();

}

【问题讨论】:

    标签: dart stream


    【解决方案1】:

    传递给listen 的函数是callback,只要将数据添加到Stream(或直到取消订阅流),Stream 就会调用该函数。

    这在Stream.listen documentation中有解释:

    对于来自该流的每个数据事件,都会调用订阅者的 onData 处理程序。

    ...

    当订阅暂停或取消时,订阅不会接收事件,也不会调用任何事件处理函数。

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-11
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多