Dartlang rxdart -合并不同类型的流

nwsw7zdq  于 2023-04-03  发布在  其他
关注(0)|答案(3)|浏览(140)

下面是我使用案例:
我有两个不同的Observables

Observable<MobileAdEvent> adEventStream;
Observable<Color> colorStream;

我需要在这两个流中的任何一个发出事件时收到通知。zipWith对我不起作用,因为它会等到两个流都有事件要发出。mergeWith似乎也不起作用,因为它期望两个流都来自相同的类型。任何提示都将非常感谢,谢谢。

42fyovps

42fyovps1#

您需要的是combineLatest运算符

Observable<Foo> foo;
Observable<Bar> bar;

final output = Observable.combineLatest2(foo, bar, (Foo foo, Bar bar) {
  // TODO: somehow merge them
});
wtzytmuj

wtzytmuj2#

你试过Observable.race吗?它非常适合通知:
给定两个或多个源流,仅从其中的第一个流发出所有项,以发出项或通知。

new Observable.race([
  new Observable.timer(1, new Duration(days: 1)),
  new Observable.timer(2, new Duration(days: 2)),
  new Observable.timer(3, new Duration(seconds: 1))
]).listen(print); // prints 3

了解更多https://pub.dev/documentation/rxdart/latest/rx/Observable/Observable.race.html

zsohkypk

zsohkypk3#

使用StreamGroup.merge并检查对象类型:

import 'package:async/async.dart';

Stream<MobileAdEvent> adEventStream;
Stream<Color> colorStream;

final merged = StreamGroup.merge([
  _orderStream.stream,
  _orderStream.stream.map((event) => event.hashCode),
]);

final subscription = merged.listen((event) {
  if (event is MobileAdEvent) {
    // handle event from first stream
  }
  if (event is Color) {
    // handle event from second stream
  }
});

相关问题