想象一下,我有一些耗时的任务,我只想偶尔运行。
我想将它包装成一个observable并将其传递给某个组件。 只要想要检索数据,该组件就会订阅此observable,并在收到数据后取消订阅。
即。我想要一个observable,在订阅时会调用一些昂贵的API调用,并且每次调用时,此API调用都可以返回不同的数据 - 然后这个observable将关闭,直到下一次订阅。
这可能实现吗?
我看过'重播()'和' cache()'运营商,但他们不会工作,因为从我的理解,他们将缓存一次,然后重播缓存的值,这不会改变我的数据。
还有' observable.publish()'但似乎这将成为一个热门的观察者,它将一直与源观察源保持联系......
答案 0 :(得分:3)
据我了解你的问题,你需要冷漠观察。
Observable<Integer> obs = Observable.from(1, 2, 3, 4);
obs.subscribe(); // will iter over values
obs.subscribe(); // will iter AGAIN over values
所以,如果你的observable是你的api调用,并且它是一个冷可观察的,只需订阅两次即可执行两次api调用。