A única diferença entre Observable.of
e Observable.from
o formato dos argumentos? Como o Function.prototype.call
e Function.prototype.apply
?
Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})
Nem tanto. Ao passar uma matriz para Observable.from
, a única diferença entre ela e Observable.of
a maneira como os argumentos são passados.
No entanto, Observable.from
aceitará um argumento que é
um objeto assinável, um Promise, um Observable, um Array, um iterável ou um objeto do tipo Array a ser convertido
Não há comportamento semelhante para Observable.of
- que sempre aceita apenas valores e não realiza conversão.
É importante observar a diferença entre of
e from
ao passar uma estrutura semelhante a uma matriz (incluindo cadeias):
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
imprimiria toda a matriz de uma só vez.
Por outro lado,
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
imprime os elementos 1 por 1.
Para strings, o comportamento é o mesmo, mas no nível do personagem.
Outro fato interessante é Observable.of ([]) será uma matriz vazia quando você se inscrever nela. Onde, quando você assina o Observable.from ([]), não recebe nenhum valor.
Isso é importante quando você faz uma operação consecutiva com o switchmap.
Ex: no exemplo abaixo, estou salvando um trabalho, sites e comentários como um fluxo.
se não houver site para salvar, ou seja; data.length = 0 na seção addSite, o código acima está retornando Observable.of ([]) e depois salva os comentários. Mas se você substituí-lo por Observable.from ([]), os métodos seguintes não serão chamados.
rxfiddle
fonte
Diferença de uma linha:
from : emite os itens um a um da matriz. Por exemplo
of : Emite toda a matriz de uma vez. Por exemplo
NOTA: do operador pode se comportar a partir do operador com o operador espalhado
fonte
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
fonte
from
: Crie observável a partir de matriz, promessa ou iterável. Leva apenas um valor. Para matrizes, iterables e strings, todos os valores contidos serão emitidos como uma sequênciaof
: Criar observável com quantidades variáveis de valores, emitir valores em sequência, mas matrizes como valor únicofonte