有没有一种单一的订阅流,不会抛出异常。而是自动取消旧的订阅?

问题描述 投票:0回答:1

标题几乎描述了一切。我发现自己经常这样做。

  StreamSubscription willDismissPageStreamSubscription;

  @override
  void initState() {
    willDismissPageStreamSubscription?.cancel();
    willDismissPageStreamSubscription =
        bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {});
  }

我在一个可以被多次调用的方法中监听一个流。如果我不取消订阅,每次调用initState时,它都会创建一个新的订阅。我想知道是否有一个Stream,谁允许这样,每次通过调用listen创建一个新的StreamSubscription,旧的订阅被取消。

  @override
  void initState() {
        bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {});
  }

EDIT: 我正在寻找一个单一订阅流,但不是抛出一个异常,而是取消最后一个StreamSubscription。

EDIT 2: 如果这样的Stream不存在,我如何创建它?

flutter dart rxjs rx-java2
1个回答
1
投票

一般来说,你不希望新的订阅突变旧的订阅。这使得观测值难以推理。

这是一个串行模式,一般是用一个 系列一次性产品. 呼叫 set 原子化地取消之前的订阅。

  SerialDisposable serial = new SerialDisposable();

  @override
  void initState() {
       serial.set(bloc.willDismissPageStream(widget.pageIndex).listen((willDismiss) {}));
  }

如果你想在Observable中得到这种行为,你可以发送一个完成的通知,而不是导致管道拆分的错误,但这不是我所推荐的。

© www.soinside.com 2019 - 2024. All rights reserved.