调用StreamController.add后调用addError出现异常的问题求助
问题原因与解决方法
你遇到的问题根源在于默认的StreamController是单订阅流。单订阅流的核心特性是:一旦流触发错误事件,整个流会直接进入终止状态,后续再调用add或addError都会抛出异常。这就是第三个Future报错时控制器崩溃的原因——第一个错误已经让单订阅流终止,后续的add(1)和第二个addError全是无效操作。
解决方法
把创建StreamController的代码替换为广播控制器即可,广播流支持多次发送数据和错误事件,不会因单次错误终止:
StreamController<int> c = StreamController.broadcast();
修改后你的测试用例会完全符合预期:先接收第一个Exception错误,接着收到成功返回的1,最后接收第二个Exception错误。
如果业务场景必须保留单订阅特性,也可以在每次流终止后重新创建控制器,但显然广播控制器更适配这种需要多次转发错误和数据的场景。
内容的提问来源于stack exchange,提问作者hace
相关产品推荐
相关产品推荐

