RxJava 原始碼解讀分析 from

2021-07-31 14:18:55 字數 925 閱讀 8880

我們繼續,看看observable.from()是怎麼回事,from原始碼如下圖。

再來看看onsubscribefromarray這個類,如下圖

我們發現,onsubscribefromarray就是乙個onsubscribe,要實現了call()介面,call()方法中,只是設定了乙個新的fromarrayproducer,再來看看child.setproducer()方法,如下圖:

由於原始的subscriber很早就被轉換為safesubsciber,所以,passtosubscriber為true,setproducer()方法會被執行2遍,但最終還是呼叫了producer.request()方法,這個producer就是上上圖中提到的fromarrayproducer。我們來直接看看request()方法做了什麼,如下圖:

看到了吧,最終還是for each element in array, do child.onnext(t),從array頭到尾,順序的emit出資料,而這裡的child就是原始的subscriber。

同理,如果是observeon(scheduler),就是非同步的將emit出的資料放到queue佇列中,再非同步的進行消費處理,這裡很自然的有了 「生產者」和「消費者」的概念。

RxJava 原始碼解讀分析 observeOn

observable.observeon 方法有點繞,我們一點一點看。從上圖中,我們可以看出,observeon主要作的工作是 1,通過指定的scheduler來切換執行緒,用來emit資料,這個資料就是onnext data 方法的引數。2,emit出來的資料,先非同步的快取到乙個buffer,實...

vuex 原始碼分析 vuex原始碼解讀 簡易實現

原始碼解讀 開始之前,先貼個大綱 首先,我們從使用方法入手,一步步來看 store.js import vue from vue import vuex from vuex vue.use vuex export default new vuex.store data 2000 main.js im...

RxJava2原始碼解析

原始碼總結 observabel 通過create方法。將observableonsubscribe物件傳遞給自己。通過subscribe方法。建立 observableemitter發射器物件。發射器裡又封裝了observer。發射器又作為引數傳遞 給observableonsubscribe物件...