Alguém pode explicar a diferença entre Observable, Completable e Single no RxJava com exemplos claros?
Em que cenário usamos um sobre os outros?
Alguém pode explicar a diferença entre Observable, Completable e Single no RxJava com exemplos claros?
Em que cenário usamos um sobre os outros?
Respostas:
Observable
é o bloco de construção genérico ReactiveX, de fonte de evento que emite valores ao longo do tempo. (e, portanto, existe em todas as linguagens para a qual ReactiveX foi estendido)
em resumo Os eventos observáveis são:
onNext * (onCompleted | onError)? / (* zero ou mais? - zero ou 1)
Single
e Completable
são novos tipos introduzidos exclusivamente no RxJava que representam tipos reduzidos de Observable
, que possuem API mais concisa.
Single
representam Observable
que emitem um único valor ou erro.
Completable
representam Observable
que não emite nenhum valor, mas apenas eventos terminais, onError
ouonCompleted
Você pode pensar nas diferenças como as diferenças de um método que retorna:
Coleção de objetos - observáveis
Objeto único - Único
e método que não retorna valores (método void) - Completável.
Single
pode ser apropriado quando você tem Observável orientado para tarefas e espera um valor único, como a solicitação de rede que é executada uma vez e o valor de retorno (ou erro), a chamada de rede é operada de uma só vez, o que significa que você não espera que ela retorne valores adicionais hora extra. Outro exemplo é a operação de busca de dados do banco de dados.
Completable
é apropriado quando você tem um Observable
e não se preocupa com o valor resultante da operação, ou não existe. Os exemplos são a atualização de um cache, por exemplo, a operação pode ser bem-sucedida / falhar, mas não há valor.
Outro exemplo é alguma operação init de longa duração que não retorna nada. Pode ser uma chamada de rede UPDATE / PUT que resultou apenas com indicação de sucesso.
Em qualquer caso, Completable e Single não estão adicionando novos recursos, mas estão introduzindo APIs mais robustas e concisas, que informam mais sobre as operações por trás do Observable que a API expôs.
Editar:
Maybe
:RxJava2 adicionou um novo tipo chamado Maybe
, Maybe
é a combinação de Completable
e Single.
Na mesma linguagem acima, Maybe
pode ser pensado como um método que retorna
Optional
de algum tipo, Optional
é um invólucro em torno de Object que diz explicitamente se temos algum valor nele - Object
ou não (em vez de nulo).
Com Maybe
podemos ter algum valor exatamente igual Single
ou não retornar nada - exatamente igual Completable
. Além disso, como ambos, temos o erro.
Maybe
é valioso quando queremos marcar que um Observable
pode não ter um valor e apenas será concluído.
Um exemplo seria obtido do cache, não necessariamente teremos um valor no cache, portanto, neste caso, concluiremos, agora obteremos onNext
com o valor do cache.
Isso também é válido para lidar com valores não nulos em um fluxo com RxJava2.
Flowable
:Primeiro, vamos definir a contrapressão. A contrapressão é um meio de lidar com a situação em que os dados são gerados mais rapidamente do que podem ser processados. Flowable
tem suporte de contrapressão permitindo que o downstream solicite itens. Você pode ler mais sobre as diferenças aqui .
Maybe<T>
, essencialmente Single<T?>
,?
Single
um Completable
com valor retornado?
Uma resposta concisa que encontrei aqui na seção RXJava.