Sobes.tech
Middle

O que é um observable?

sobes.tech IA

Resposta da IA

Observable é uma entidade que representa um fluxo de dados ou eventos, que pode ser assíncrono. As fontes observáveis podem emitir valores durante um período de tempo determinado, e os assinantes (Subscribers ou Observers) podem reagir a esses valores à medida que aparecem.

Conceitos-chave:

  • Observable (Fonte observável): Fonte de dados ou eventos.
  • Observer (Observador): Objeto com métodos para reagir a eventos do Observable (next, error, complete).
    • next: Receber o próximo valor.
    • error: Ocorre um erro.
    • complete: Finaliza o fluxo de dados.
  • Subscription (Assinatura): Conexão entre o Observable e o Observer. A assinatura é criada ao chamar o método subscribe em um Observable. Permite que o Observer receba valores e gerencie o ciclo de vida da assinatura (por exemplo, cancelar para evitar vazamentos de memória).
  • Operators (Operadores): Funções para transformar, combinar e gerenciar fluxos de Observable. Exemplos: map, filter, mergeMap, debounceTime.

Ao contrário das Promises, os Observable podem emitir múltiplos valores ao longo do tempo, representando fluxos de dados em vez de um evento assíncrono único.

Exemplo de uso em RxJS (uma biblioteca popular para programação reativa):

import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

// Criando um Observable a partir de um array
const source = new Observable(observer => {
  observer.next(1);
  observer.next(2);
  observer.next(3);
  observer.complete(); // Finaliza o fluxo
});

// Assinatura e uso do operador
const subscription = source.pipe(
  map(value => value * 2) // O operador map duplica cada valor
).subscribe({
  next: value => console.log(value), // Recebendo valores: 2, 4, 6
  error: err => console.error(err), // Tratamento de erros
  complete: () => console.log('Complete!') // Finaliza
});

Vantagens principais:

  • Programação reativa: gerenciamento conveniente de fluxos de dados assíncronos.
  • Componibilidade: possibilidade de combinar e transformar facilmente os fluxos com operadores.
  • Gerenciamento do ciclo de vida: a assinatura permite gerenciar explicitamente a recepção de dados e evitar vazamentos de memória.