我试图找出Reactor Project,我正在寻找一种取消订阅的方法。 我知道在进行例如Flux的订阅后,我可以获得可用于发送onCancel信号的Cancellation对象的引用,但这只是在订阅之后我需要在某种Collection中保存该引用。
有更好的方法来获取取消对象吗?或者只是取消订阅。也许某种地方包含对所有活跃订阅的引用 - 是的,这将是非常棒的......
答案 0 :(得分:5)
在Reactor中,在您调用Subscription
之前想要取消subscribe()
是没有意义的(因为它是创建Subscription
并传播该take(int)
的方法。向链发出信号以开始发射数据。)
没有所有订阅的集中位置,这没有多大意义,因为您需要一种方法来查找要取消的特定订阅(并记住链中的每个运营商)也可以使用中间订阅......)。
请注意,有些运营商也会代表您取消订阅!例如Flux.just(1, 2, 3, 4).log().take(2).subscribe(System.out::println);
就是这种情况,一旦发出足够的项目就会取消上游:
14:17:48.729 [main] INFO reactor.Flux.Array.1 - | onSubscribe([Synchronous Fuseable] FluxArray.ArraySubscription)
14:17:48.732 [main] INFO reactor.Flux.Array.1 - | request(unbounded)
14:17:48.732 [main] INFO reactor.Flux.Array.1 - | onNext(1)
1
14:17:48.732 [main] INFO reactor.Flux.Array.1 - | onNext(2)
2
14:17:48.732 [main] INFO reactor.Flux.Array.1 - | cancel()
将输出:
$.ajax({
url: 'https://api.instagram.com/v1/users/xxxxxxx/media/recent/?access_token=xxxxxxxxxxx',
error: function() {
alert('error');
},
success: function(data) {
alert('yes');
},
type: 'GET'
});