簡體   English   中英

產生另一個廣播 stream 與 Dart

[英]Yield another broadcast stream with Dart

我正在嘗試yield*廣播 stream 但由於某種原因,它沒有按我的預期工作。

Firebase/FlutterFire 庫似乎就是這樣做的。

import 'dart:async';

final controller = StreamController<int>.broadcast();

Stream<int> getStream() async* {
  yield 1;
  yield* controller.stream;
}

void main() {
  controller.add(0);

  getStream().listen(
    (event) => print('BC Event: $event'),
    onDone: () => print('BC Done'),
    onError: (error) => print(error),
  );

  controller.add(2);
  controller.close();
}

預期的:

BC Event: 1
BC Event: 2
BC Done

實際的:

BC Event: 1
BC Done

任何想法?

我認為問題在於您在 stream 可以返回第二個值之前過早關閉監聽事件

我用計時器測試過,它有效

import 'dart:async';

final controller = StreamController<int>.broadcast();

Stream<int> getStream() async* {
  yield 1;
  yield* controller.stream;
}

void main() async {
  controller.add(0);

  getStream().listen(
    (event) => print('BC Event: $event'),
    onDone: () => print('BC Done'),
    onError: (error) => print(error),
  );
  
  
  await Future.delayed(Duration(seconds: 1));
  controller.add(2);
  controller.add(3);
  controller.add(4);
  controller.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM