2017-09-08 76 views
1

我是ReactiveX的新手。我從源代碼中學習它。一切都很清楚,但突然之間我得到了一個名爲「消費者」的詞,這是一個界面。它被用來代替Observer。 有人可以讓我知道它到底做了什麼嗎?使用Reactivex的消費者接口

我跟隨了幾個鏈接,但他們只是說了一條語句Consumer是一個接受單個值的函數接口(回調函數)。 我想知道它的確切工作。

  1. 這是什麼?
  2. 我們爲什麼需要它?
  3. 如何使用它?
  4. 它代替觀察者嗎?如果是,如何和爲什麼?
+0

相同。我有這樣的訂閱(消費者)訂閱。不明白嗎? –

回答

2

Consumer是一個簡單的java接口,接受類型T的變量。 ,正如您所說,它用於回調。

例子:

import io.reactivex.functions.Consumer; 

Flowable.just("Hello world") 
    .subscribe(new Consumer<String>() { 
     @Override public void accept(String s) { 
      System.out.println(s); 
     } 
    }); 

爲什麼它的工作?我們如何使用消費者而不是觀察者?

RxJava簡單地創建了一個觀察者,通過消費者給它一個它被稱爲onNext

更新

LambdaObserver是一種觀察者,它是由四個功能接口創建的,並將它們用作回調函數。這主要是使用java 8 lambda expressions。它看起來像這樣:

Observable.just(new Object()) 
       .subscribe(
         o -> processOnNext(o), 
         throwable -> processError(throwable), 
         () -> processCompletion(), 
         disposable -> processSubscription() 
       ); 
+0

這個答案看起來不錯,但你可以在這裏更多地啓發 –

2

一個Consumer消耗您訂閱時收到的值。這就像一個Subscriber誰傳遞發射的數據作爲回調。

Consumer是一個簡單的接口,它具有對通用類型的回調,並且需要接收Observable發出的項目。

請注意,如果您只有消費者,您不會發現錯誤,並且可能通過調試出現問題。

您可以通過使用另一個Consumer作爲接收Throwable的第二個參數來解決此問題。

Flowable.just("Hello world") 
    .subscribe(
      emittedData -> System.out.println(s), 
      error -> System.out.println("Error occured: "+ error) 
); 
+0

爲什麼我們需要它? –