【发布时间】:2022-01-05 06:46:08
【问题描述】:
我想根据另一个流的值/事件返回一个流。
例如,如果我有 2 个流,stream1 和 stream2,我想创建一个函数,它根据 stream1 的值作为流返回 stream2 或 null。我该怎么做?
我尝试映射 stream1 并根据事件生成 stream2,但它不起作用。我也听不到stream1,基于事件yield stream2。
Stream<Data1?> getStream1() async* {
// yield stream1
}
Stream<Data2?> getStream2(dynamic value) async* {
//yield stream2 based on value
}
Stream<Data2?> getStream12() async* {
final stream1 = getStream1();
// not working
yield* stream1.map((event) => event == null ? null : getStream2(event.var));
// I also tried await for, but it has a strange behaviour
// if I listen to the stream after (it's inconsistent)
await for (var event in stream1) {
if (event == null) {
yield null;
} else {
yield* getStream2(event.var);
}
}
}
是否有任何解决方案,最好不要像 rxdart 这样的任何额外的包依赖项,只是纯 dart?
【问题讨论】:
-
您的
await for代码看起来正确。什么不适合你?你得到什么错误? -
@Irn 我第一次运行它,它工作,然后它停止工作。比如,假设我输入了
stream1: value1 -> null -> value2,getStream12()更改为value1,然后为null,然后它不会再次更改为value2。 -
这听起来更像是
getStream2的问题,而不是await for循环的问题。尝试检查getStream2在调用之间是否没有缓存或重用某些内容。
标签: dart dart-async dart-stream