Reactor取消订阅的方式

时间:2016-09-01 19:47:23

标签: java reactive-programming project-reactor

我试图找出Reactor Project,我正在寻找一种取消订阅的方法。 我知道在进行例如Flux的订阅后,我可以获得可用于发送onCancel信号的Cancellation对象的引用,但这只是在订阅之后我需要在某种Collection中保存该引用。

有更好的方法来获取取消对象吗?或者只是取消订阅。也许某种地方包含对所有活跃订阅的引用 - 是的,这将是非常棒的......

1 个答案:

答案 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'
   });