Requisitos: O projeto precisa converter Observáveis em Promessas e aguardar a conclusão, e ao usar o método toPromise() em um projeto Angular, o hint foi descontinuado, e então recomenda-se usar os métodos estáticos firstValueFrom ou lastValueFrom.
Por que desvalorizar o método toPromise()?
Como o nome do método toPromise() nunca indica qual valor emitido a Promessa irá resolver, pois os Observáveis podem produzir múltiplos valores ao longo do tempo. Ao converter para uma Promessa, você pode querer escolher se deseja selecionar o primeiro valor a chegar ou o último valor. Para resolver todos esses problemas, decidimos desvalorizar o toPromise() e introduzir duas novas funções auxiliares para converter em promises.
Simplesmente entendaObserváveis produzem múltiplos valoresE entãoPromessas só resultarão em um valorDepois, alguns usuários querem usar o primeiro valor, e outros querem usar o último valor, então aparecem firstValueFrom e lastValueFrom. (Nota: toPromise() é o último valor a obter os observáveis)
exemplo firstValueFrom
Você pode querer obter o primeiro valor quando ele chegar sem esperar o Observable terminar, para poder usar firstValueFrom. firstValueFrom resolverá a Promessa com o primeiro valor emitido pelo Observável e cancelará imediatamente a subscrição para preservar o recurso. Se o Observável se completa sem emitir qualquer valor, o primeiroValorDe também será rejeitado com um EstripDeVazio.
exemplo lastValueFrom
lastValueFrom é quase idêntico a toPromise(), o que significa que ele analisará com o último valor alcançado quando o Observável for concluído, mas se comporta de forma diferente quando o Observável se completa sem emitir um único valor. Quando o Observable for concluído sem ser disparado, toPromise() será resolvido com sucesso para indefinido (então o tipo de retorno muda), e lastValueFrom será rejeitado como EmptyError. Portanto, o tipo de retorno de lastValueFrom é Promise<T>, assim como toPromise() no RxJS 6.
Exemplo de análise sintática
No RxJS, intervalo (1000) gera um observável que emite uma sequência incremental de números a cada 1000 milissegundos (ou seja, 1 segundo), começando em 0.
Em seguida, .pipe(take(10)) é uma cadeia de operadores que limita o número de elementos que o Observável emite. Aqui, take(10) significa que apenas os valores dos primeiros 10 emitidos são tomados.
Vamos explicar essa expressão em detalhes:
intervalo(1000): Crie um observável que emita um número a cada 1 segundo. A sequência numérica começa em 0 e aumenta em 1 a cada vez.
.pipe(take(10)): Use o método .pipe() para conectar múltiplos operadores. Aqui usamos o operador take(10), que limita o observável a emitir apenas os primeiros 10 valores.
Teste para erros de EmptyError
O código é o seguinte:
ou
Referência:O login do hiperlink está visível. |