Esta é uma questão perfeitamente válida e não deveria ter sido fechada. Embora rx seja uma ótima biblioteca, a documentação e os exemplos são, infelizmente, extremamente pobres e confusos.
RunLoop
Respostas:
247
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:
RxJava2 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.
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 .
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
eCompletable
são novos tipos introduzidos exclusivamente no RxJava que representam tipos reduzidos deObservable
, que possuem API mais concisa.Single
representamObservable
que emitem um único valor ou erro.Completable
representamObservable
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 umObservable
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:
RxJava2
Maybe
:RxJava2 adicionou um novo tipo chamado
Maybe
,Maybe
é a combinação deCompletable
e Single.Na mesma linguagem acima,
Maybe
pode ser pensado como um método que retornaOptional
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 igualSingle
ou não retornar nada - exatamente igualCompletable
. Além disso, como ambos, temos o erro.Maybe
é valioso quando queremos marcar que umObservable
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.
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 .fonte
Maybe<T>
, essencialmenteSingle<T?>
,?Single
umCompletable
com valor retornado?Uma resposta concisa que encontrei aqui na seção RXJava.
fonte