日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rxjs里的Observable对象subscribe方法的执行原理

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rxjs里的Observable对象subscribe方法的执行原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看個例子:

const myObservable = of(1, 2, 3);// 創建一個觀察者對象-Observer(處理next、error、complete回調)const myObserver = {next: x => console.log('Observer got a next value: ' + x),error: err => console.error('Observer got an error: ' + err),complete: () => console.log('Observer got a complete notification'),};// 通過Observable的subscribe函數,觀察者去訂閱可觀察者的消息myObservable.subscribe(myObserver);

調用Observable的subscribe方法,傳入一個包含回調函數的observer對象:

后兩個參數都是undefined:

在toSubscriber函數里,因為nextOrObserver是我手動傳入的對象,所以前兩個IF條件均不滿足:

進入默認實現,新建一個Subscriber對象:

Subscriber是Subscription的子類:

我們現在的Subscriber的構造函數里,創建一個SafeSubscruber實例:this作為parent subscriber傳入

EmptyObserver是從./Observer導入進來的:

從SafeSubscriber的實現能看出,傳入的Observer對象的next,error和complete這些函數名稱都是硬編碼的,必須符合這個命名規范:


Object.create()方法創建一個新對象,使用現有的對象來提供新創建的對象的__proto__。

執行subscribe:

sink的destination包含了應用程序傳入的complete, next, error邏輯:

這里能看到,subscribe的邏輯就是,遍歷所有Observable參數,依次調用observer的next方法,最后再調用一次complete方法:

next調用私有的_next方法:

this._next調用this.destination.next:


最終調用到應用程序員傳入的next方法:

最后的輸出:

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

總結

以上是生活随笔為你收集整理的rxjs里的Observable对象subscribe方法的执行原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。