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)
Singlee Completablesão novos tipos introduzidos exclusivamente no RxJava que representam tipos reduzidos de Observable, que possuem API mais concisa.
Singlerepresentam Observableque emitem um único valor ou erro.
Completablerepresentam Observableque não emite nenhum valor, mas apenas eventos terminais, onErrorouonCompleted
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.
Singlepode 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 Observablee 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 Completablee Single.
Na mesma linguagem acima, Maybepode ser pensado como um método que retorna
Optionalde algum tipo, Optionalé um invólucro em torno de Object que diz explicitamente se temos algum valor nele - Objectou não (em vez de nulo).
Com Maybepodemos ter algum valor exatamente igual Singleou não retornar nada - exatamente igual Completable. Além disso, como ambos, temos o erro.
Maybeé valioso quando queremos marcar que um Observablepode 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 onNextcom 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. Flowabletem suporte de contrapressão permitindo que o downstream solicite itens. Você pode ler mais sobre as diferenças aqui .
Maybe<T>, essencialmente Single<T?>,?
Singleum Completablecom valor retornado?
Uma resposta concisa que encontrei aqui na seção RXJava.