場景1:被觀察者、觀察者和訂閱分開寫
/**
* 先建立乙個上游observable
* 角色:被觀察者
*/observableobservable = observable.create(new observableonsubscribe()
});
/**
* 建立乙個下游observer
* 角色:觀察者
*/observerobserver = new observer()
@override
public
void
onnext(@nonnull string s)
@override
public
void
onerror(@nonnull throwable e)
@override
public
void
oncomplete()
};
//建立連線(上游訂閱下游)
observable.subscribe(observer);
場景2:被觀察者、觀察者和訂閱一起寫
observable.create(new observableonsubscribe()
}).subscribe(new observer()
@override
public
void
onnext(@nonnull string s)
@override
public
void
onerror(@nonnull throwable e)
@override
public
void
oncomplete()
});}
observableemitter,顧名思義被觀察者的發射器。聽著有點滑稽,實際上它就是乙個發射器,用於從上游發射要傳送的資料或者控制資訊到下游。
observableemitter的源**如下所示。
public
inte***ce
observableemitter
extends
emitter
observableemitter接受泛型資料,並且繼承了乙個更加底層的介面emitter,索性再看看emitter類的原始碼。
public
inte***ce emitter
下面簡要介紹下重點的幾個方法。
1) onnext(@nonnull t value)方法
這個方法就是最關鍵的方法了,當被觀察者和觀察者建立了連線。那麼,正常情況下只要沒有發生錯誤或者連線被廢棄的話。上游(被觀察者)就會通過這個方法往下游(觀察者)傳遞訊息,下游 會在onnext方法中接受到訊息,進行相應的處理。
2)onerror(@nonnull throwable error)方法
這個方法一般是在發生錯誤時,上游會將錯誤資訊封裝在throwable中拋給下游,下游會在onerror方法中接受到錯誤資訊進行相應的錯誤處理。
這裡需要格外注意的是:當emitter丟擲錯誤時,連線將中斷,後面再進行onnext(@nonnull t value)也不會得到任何回應了。另外,onerror(@nonnull throwable error)方法也只會呼叫一次,寫100個onerror(@nonnull throwable error)也只有第乙個會呼叫。後面的不但不會呼叫,還會出錯。
3)oncomplete()方法
改方法呼叫後,下游會在oncomplete()方法中回應,上下游的連線即可中斷。上游再呼叫onnext(@nonnull t value)方法也不會得到任何回應了。oncomplete()方法也是只呼叫一次,而且跟onerror是互斥的,他倆都可以即可中斷連線。
Java基礎知識點總結
一 方法的過載 方法的過載與返回值型別無關,只需滿足兩個條件即可 一是方法名相同,二是引數個數或型別不同。二 陣列初始化 動態初始化 在定義陣列時,只指定陣列長度,由系統自動為元素賦值的方式。靜態初始化 在定義陣列時為每個元素賦值。有兩種方式 陣列靜態初始化的方式有兩種 1.型別 陣列名 new 型...
CSS基礎知識點總結
一 css的簡介 1 什麼是css 層疊樣式表,css是對html進行樣式修飾語言 層疊 就是層層覆蓋疊加,如果不同的css樣式對同一html標籤進行修飾,樣式有衝突的部分應用優先順序高的,不衝突的部分共同作用 樣式表 就是css屬性樣式的集合 2 css的作用 1 修飾html的 使其html樣式...
jquery基礎知識點總結
方式一 function 方式二 document ready function 注意 使用jquery獲取的物件叫做jquery物件,只能使用jquery的方法,使用原生js獲取的物件叫做dom物件,只能使用原生方法,兩者不能混用 因此可以讓jquery物件跟dom物件相互轉換 dom物件轉換為j...