TransWikia.com

Qual é a diferença entre Promises e Observables?

Stack Overflow em Português Asked by Matheus Bessa on January 2, 2022

Alguém consegue me explicar a diferença entre Promises e Observables? Gostaria de entender as vantagens e desvantagens de cada um. Qual é mais performático, qual aplica uma melhor prática para desenvolvimento e etc. Obrigado!

4 Answers

Uma das diferenças é que utilizando observable você pode retornar multiplos valores enquanto em promises você retorna apenas um, exemplo: https://youtu.be/3rbikUwGf9Y

Outra diferença é que pra utilizar observable você precisa importar o RxJs que permite utilizar operadores como map, filter entre outros, como se você estivesse lidando com um array, porém não te permite utilizar async/await. Já em promises não é preciso importar algo pra utilizá-la e é possível utilizar async/await.

Answered by Raphael on January 2, 2022

Promises são nativas do ES6 e são ótimas opções principalmente comparada a callback, podemos viver bem com elas. Os métodos then(), que podem ajudar a resolver vários problemas, um bom exemplo seria encadeá-los tipo .then(...).then(...) . Métodos como All(), Race()... várias boas possibilidades utilizando apenas Promise. Contudo, ainda no ES7 temos os Async/Await que só trabalha com Promise!

Para executar um Observable, é necessário utilizar seu método Subscribe(). Oi? Parece ser igual ao then(), mas não é! Enquanto em Observable pode-se realizar toda a programação com map(), catch() e tudo antes de ser executado, e então, quando disparar o Subscribe() ai sim... ai sim, será executado. Promise, após o retorno o que se faz com o then() é tratamento.

O que acabei de dizer, caracteriza um Observable como Lazy (preguisoso), já Promise como eager (ansiosas). Não confunda essa palavra com Jaegers de Pacific Rim! :o P

Promise vai executar e utiliza-se o then() para tratar. Já o Observable não, ele espera Subscribe() onde é quem realmente executa e trata (reativo).

Então é uma simples questão de preferência? Acredito que não! Mas, por ser reativo, Observable seria minha opção! Em suas posibilidades como da função Retry(), que tenta reconectar ou chamar a sua requisição novamente caso você tenha problemas de oscilação de conexão, por exemplo, é um ótimo recurso. Promise não possui essa característica reativa, porém Promise já é Nativa ES6, como dito no início dessa resposta. Não precisamos importar nada, Observable é uma alternativa já vinda do RxJS e precisa ser importado, e muito comum para dev Angular 2+.

Answered by Vinícius Andrade on January 2, 2022

Observable Por definição é uma coleção que funciona de forma unidirecional, ou seja, ele emite notificações sempre que ocorre uma mudança em um de seus itens e a partir disso podemos executar uma ação.

Mas quais são as vantagens de usar Observable e não Promises? A grande vantagem está nos “poderes” que o Observable nos dá com seus operadores, por exemplo: Podemos “cancelar” requests para poupar processamento, ou até mesmo tentar fazer uma nova requisição caso algum problema como perda de conexão aconteça. O usuário não precisa ver aquela tela de erro.

source

Answered by Diego Venâncio on January 2, 2022

Talvez não saiba te explicar exatamente a diferença entre esses dois conceitos, mas se já for de uma alguma ajuda, dê uma olhada na resposta do seguinte link:

https://cursos.alura.com.br/forum/topico-observable-ou-promise-34392

Pelo meu entendimento a Promise processa um único evento quando uma operação assíncrona é concluída ou falha, já o Observable permite passar zero ou mais eventos onde o callback é chamado para cada evento.

Muitas vezes Observable é preferido porque fornece as características de Promise e muito mais. Com Observable não importa se você deseja manipular 0, 1 ou vários eventos. Você pode utilizar a mesma API em cada caso. Ele também tem a vantagem de "ser" uma Promise cancelável .

Espero ter ajudado!

Answered by Z.. on January 2, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP