例を見てください:
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メソッドを呼び出し、コールバック関数を含むオブザーバーオブジェクトを渡します。
最後の2つのパラメーターは未定義です。
toSubscriber関数では、nextOrObserverは手動で渡したオブジェクトであるため、最初の2つのIF条件が満たされていません。
デフォルトの実装を入力し、新しいサブスクライバーオブジェクトを作成します。
サブスクライバーはサブスクリプションのサブクラスです。
現在のサブスクライバーのコンストラクターで、SafeSubscruberインスタンスを作成します。これは、親サブスクライバーとして渡されます
EmptyObserverは./Observerからインポートされます:
SafeSubscriberの実装からわかるように、渡されたObserverオブジェクトのnext、error、completeの関数名はすべてハードコーディングされており、次の命名規則に準拠している必要があります。
Object.create()メソッドは、新しいオブジェクトを作成し、既存のオブジェクトを使用して、新しく作成されたオブジェクトの__proto__を提供します。
サブスクライブを実行します。
シンクの宛先には、アプリケーションから渡された完全な次のエラーロジックが含まれています。
ここを見るとわかるように、subscribeのロジックは、すべてのObservableパラメータをトラバースし、observerの次のメソッドを順番に呼び出し、最後にcompleteメソッドをもう一度呼び出すことです。
次に、private _nextメソッドを呼び出します。
this._nextはthis.destination.nextを呼び出します。
最後に、アプリケーションプログラマによって渡される次のメソッドが呼び出されます。
最終的な出力:
Jerryによるオリジナルの記事をさらに入手するには、パブリックアカウント「Wang Zixi」に従ってください。