RxJava创建消费者不安全的

时间:2017-12-11 18:53:20

标签: rx-java

我是RX java的新手。

尝试使用订阅者创建使用者,但我看到不推荐使用create方法。

我看到几乎所有其他创建方法,除了具有Emitter类的方法,都使用这种不安全的方法。

这是什么意思“不安全”,这与发射器的区别是什么。我不应该用这个吗?

  @Deprecated
    public static <T> Observable<T> create(OnSubscribe<T> f) {
        return new Observable<T>(RxJavaHooks.onCreate(f));
    }

  @Experimental
    public static <T> Observable<T> unsafeCreate(OnSubscribe<T> f) {
        return new Observable<T>(RxJavaHooks.onCreate(f));
    }

修改

我怎样才能改变这样的事情(当然我简化了): 我正在尝试创建一个从远程HTTP服务创建的Observable。

return Observable.unsafeCreate(subscriber -> {
  HttpEntity entity = restTemplate.get(...)
    if (entity.status != 200) {
            subscriber.onError(new RunTimeException("Error");
    }
    else {
       Object object = createObject(entity)
       subscriber.onNext(object);
       subscriber.onCompleted();
    }
 });

问候,Ido

1 个答案:

答案 0 :(得分:0)

  

这是什么意思&#34;不安全&#34;

不安全意味着您需要高级RxJava知识才能通过createunsafeCreate来实施运算符,但不建议这样做。

create方法是创建RxJava内部运算符的一种非常早期的方法,必须公开才能让它跨包运行。不幸的是,很多人发现了这种方法并开始实现基本的源代码,然后想知道为什么他们的实现失败由于二进制兼容性以及正确使用它的人,我们无法删除该方法。

  

这与发射器之间有什么区别

发射器版本正确设置取消订阅并强制开发人员指定背压策略,通常不会考虑导致create的原始MissingBackpressureException

  

我不应该使用它吗?

由于您不熟悉RxJava,因此不应使用create(OnSubscribe)unsafeCreate(OnSubscribe)。同时考虑学习RxJava v2,而不再是不安全的创建。