O princípio de implementação do método de assinatura de objeto Observable em rxjs

Veja um exemplo:

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);

Chame o método de inscrição de Observable e passe um objeto observador contendo uma função de retorno de chamada:

Os dois últimos parâmetros são indefinidos:

Na função toSubscriber, como nextOrObserver é o objeto que passei manualmente, as duas primeiras condições IF não são atendidas:

Insira a implementação padrão e crie um novo objeto Assinante:

Assinante é uma subclasse de Assinatura:

No construtor de nosso assinante atual, crie uma instância SafeSubscruber: ela é passada como assinante pai

EmptyObserver é importado de ./Observer:

Como pode ser visto na implementação do SafeSubscriber, os nomes das funções next, error e complete do objeto Observer passado são todos codificados e devem estar em conformidade com esta convenção de nomenclatura:


O método Object.create () cria um novo objeto e usa o objeto existente para fornecer o __proto__ do objeto recém-criado.

Executar inscrição:

O destino do coletor contém a lógica completa, seguinte e de erro transmitida pelo aplicativo:

Como você pode ver aqui, a lógica de subscribe é percorrer todos os parâmetros Observable, chamar o próximo método do observador e finalmente chamar o método complete novamente:

next chama o método _next privado:

this._next chama this.destination.next:


Finalmente, o próximo método transmitido pelo programador do aplicativo é chamado:

O resultado final:

Para obter mais artigos originais de Jerry, siga a conta pública "Wang Zixi":

Acho que você gosta

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