Mira un ejemplo:
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);
Llame al método subscribe de Observable y pase un objeto observador que contenga una función de devolución de llamada:
Los dos últimos parámetros no están definidos:
En la función toSubscriber, debido a que nextOrObserver es el objeto que pasé manualmente, no se cumplen las dos primeras condiciones IF:
Ingrese la implementación predeterminada y cree un nuevo objeto Suscriptor:
El suscriptor es una subclase de suscripción:
En el constructor de nuestro suscriptor actual, cree una instancia de SafeSubscruber: esto se pasa como el suscriptor principal
EmptyObserver se importa desde ./Observer:
Como se puede ver en la implementación de SafeSubscriber, los nombres de función next, error y complete del objeto Observer pasado están codificados y deben cumplir con esta convención de nomenclatura:
El método Object.create () crea un nuevo objeto y usa el objeto existente para proporcionar el __proto__ del objeto recién creado.
Ejecutar suscripción:
El destino del receptor contiene la lógica completa, siguiente y de error transmitida por la aplicación:
Como puede ver aquí, la lógica de la suscripción es atravesar todos los parámetros observables, llamar al siguiente método de observador por turno y finalmente llamar al método completo nuevamente:
next llama al método privado _next:
this._next llama a this.destination.next:
Finalmente, el siguiente método pasado por el programador de la aplicación se llama:
El resultado final:
Para obtener más artículos originales de Jerry, siga la cuenta pública "Wang Zixi":