是的,很好的人,
我可能在这里丢失了一些东西:
这段代码是虚构的(为方便起见,这过于简化了),但给出了这样的想法:
_map.keys.forEach((key) async {
_bloc.sink.add(_map[key]);
await for (String _string in _bloc.stream) {
_newMap.putIfAbsent(key, ()=> _string);
}
});
或
Stream.fromIterable(_map.keys).forEach((day) async {
_bloc.sink.add(_map[key]);
await for (String _string in _bloc.stream) {
_newMap.putIfAbsent(key, ()=> _string);
}
});
使用StreamController <...>。broadcast(); 溪流健康地缝合:
first:_Future哈希码:817453996 isBroadcast:true isEmpty:_Future 上一个:_未来长度:_未来运行时类型:类型 (_BroadcastStream <...>)single:_未来 _awaiter:null _generator:null _controller:_AsyncBroadcastStreamController
不返回此错误:
第一个:未处理的异常:\ n状态错误:流已经存在 听过。[...] hashCode:644468606 isBroadcast:false isEmpty:未处理的异常:\ n错误状态:流已经存在 听过。[...]上一个:未处理的异常:\ n错误状态:流具有 [...]长度:未处理的异常:\ n不良状态: 流已经被监听。[...] runtimeType:Type (_ControllerStream <...>)single:未处理的异常:\ n不良状态: 流已经被收听。[...] _awaiter:null _generator:null _controller:_AsyncStreamController
在两种情况下均不起作用。
我打算做的是(在for循环内)在接收器中发送一个集合,
一个集团会做一些工作,并在流中返回另一个集合
从调试中我可以看到的是,循环只会不断地将内容发送到接收器。
我不确定这是因为:
...
1)循环不等待“等待”
并导致错误“流已经监听”
2)反之,“等待”由于错误而无法收听流
(或者因为广播可能会丢失事件),因此循环保持循环(?);
...
我更倾向于第一个,但是它应该按照此POST
工作我在做什么错了?
预先感谢您,弗朗切斯科
答案 0 :(得分:1)
这好像您多次调用stream.listen。尝试将_bloc.stream分配给for循环之外的变量。
var stream = _bloc.stream;
_map.keys.forEach((key) async {
_bloc.sink.add(_map[key]);
await for (String _string in stream) {
_newMap.putIfAbsent(key, ()=> _string);
}
});