답변:
배열과 같은 구조 (문자열 포함)를 전달할 때 of
와 from
전달할 때 의 차이점에 유의해야합니다 .
Observable.of([1, 2, 3]).subscribe(x => console.log(x));
전체 배열을 한 번에 인쇄합니다.
반면에
Observable.from([1, 2, 3]).subscribe(x => console.log(x));
요소 1을 1로 인쇄합니다.
문자열의 경우 동작은 동일하지만 문자 수준입니다.
또 다른 흥미로운 사실은 Observable.of ([])가 구독 할 때 빈 배열이된다는 것입니다. Observable.from ([])에 가입하면 어떤 가치도 얻지 못합니다.
switchmap으로 연속 작업을 수행 할 때 중요합니다.
예 : 아래 예에서 작업을 저장 한 다음 사이트를 저장하고 스트림으로 댓글을 작성합니다.
.do((data) => {
this.jobService.save$.next(this.job.id);
})
.switchMap(() => this.jobService.addSites(this.job.id, this.sites)
.flatMap((data) => {
if (data.length > 0) {
// get observables for saving
return Observable.forkJoin(jobSiteObservables);
} else {
**return Observable.of([]);**
}
})).do((result) => {
// ..
})
.switchMap(() => this.saveComments())
....
저장할 사이트가없는 경우, 즉; addSite 섹션에서 data.length = 0이면 위 코드는 Observable.of ([])를 반환 한 다음 주석을 저장합니다. 그러나이를 Observable.from ([])으로 바꾸면 후속 메소드가 호출되지 않습니다.
한 줄 차이 :
let fruits = ['orange','apple','banana']
from : 배열별로 항목을 하나씩 방출합니다. 예를 들어
from(fruits).subscribe(console.log) // 'orange','apple','banana'
of : 전체 배열을 한 번에 방출합니다. 예를 들어
of(fruits).subscribe(console.log) // ['orange','apple','banana']
참고 : 의 운영자로 행동 할 수 에서 와 운영자 확산 연산자
of(...fruits).subscribe(console.log) // 'orange','apple','banana'
https://stackblitz.com/edit/typescript-sckwsw?file=index.ts&devtoolsheight=100
from
: 배열, 약속 또는 반복 가능한 것으로 관찰 가능하게 만듭니다. 하나의 값만 사용합니다. 배열, 반복 가능 및 문자열의 경우 포함 된 모든 값이 시퀀스로 생성됩니다.
const values = [1, 2, 3];
from(values); // 1 ... 2 ... 3
of
: 가변 량의 값으로 관측 가능 항목을 생성하고 값을 순서대로 방출하지만 단일 값으로 배열
const values = [1, 2, 3];
of(values, 'hi', 4, 5); // [1, 2, 3] ... 'hi' ... 4 ... 5