[英]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.