【问题标题】:RX sub observable - execute only onceRX sub observable - 只执行一次
【发布时间】:2016-09-06 18:56:18
【问题描述】:

我通常使用

Observable observable = someObservable.replay().refCount();

创建一个只执行一次的可观察对象。如果我像下面这样多次订阅observable,这很好用:

observable.observeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(...);

observable.observeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(...);

observable 只执行一次 - 完美,如我所愿。如果我现在执行以下操作:

Observable obs1 = observable.map(...); // call some operators
Observable obs2 = observable.map(...); // call some operators

obs1.observeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(...);

obs2.observeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(...);

然后observable 被执行两次。我如何确保不会发生这种情况?

【问题讨论】:

    标签: android rx-java observable


    【解决方案1】:

    我想你想要的是添加一个.take(1) 运算符。这样,一旦从 observable 中读取了某些内容,它就会调用 onComplete。

    【讨论】:

    • 我想重播整个序列...我不想失去任何东西。我的 observable 发出的所有 n 项都应该发送给任何订阅者或任何链,observable 用于
    • 啊我明白了,你可以使用 .cache() 操作符。这样,第一次执行将创建 observable,而任何其他订阅者将获得完全相同的缓存排放。将 .cache 视为为您维护状态。
    • 这行得通。我仍然很困惑,为什么refCount 不起作用...似乎refCount 仅在我直接订阅生成的可观察对象时才有效(尽管我从未读过有关此的内容)...使用autoConnect 也可以...
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2015-12-08
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多