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