Как метод прослушивания потока показывает данные, которые были добавлены через приемник ПОСЛЕ вызова метода прослушивания? - PullRequest
0 голосов
/ 17 апреля 2019

Я изучаю концепцию и практическое использование потоков (хотя и очень базовый уровень) и обнаружил, что приведенный ниже код добавляет данные через приемник ПОСЛЕ вызова метода 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();

}

1 Ответ

0 голосов
/ 18 апреля 2019

Функция, переданная в listen, является обратным вызовом , который Stream вызывает при добавлении данных в Stream (или до отмены подписки на поток).

Это объясняется в Stream.listen документации :

При каждом событии данных из этого потока вызывается обработчик onData подписчика.

...

Когда подписка приостановлена ​​или отменена, подписка не получает события и не вызывается ни одна из функций обработчика событий.

...