El principio de implementación del método de suscripción de objetos observables en rxjs

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":

Supongo que te gusta

Origin blog.csdn.net/i042416/article/details/108596093
Recomendado
Clasificación