'of'대 'from'연산자


153

인수 형식 Observable.of과 의 유일한 차이점은 Observable.from무엇입니까? 같은 Function.prototype.callFunction.prototype.apply?

Observable.of(1,2,3).subscribe(() => {})
Observable.from([1,2,3]).subscribe(() => {})

답변:


115

좀 빠지는. 에 배열을 전달할 때 배열 Observable.from과의 유일한 차이점 Observable.of은 인수가 전달되는 방식입니다.

그러나 다음과 Observable.from같은 주장 을 받아 들일 것입니다

구독 가능한 개체, 약속, 관찰 가능한 개체, 배열, 반복 가능한 개체 또는 변환 가능한 개체와 같은 개체

유사한 동작은 없습니다 Observable.of.-항상 값만 허용하고 변환을 수행하지 않습니다.


193

배열과 같은 구조 (문자열 포함)를 전달할 때 offrom전달할 때 의 차이점에 유의해야합니다 .

Observable.of([1, 2, 3]).subscribe(x => console.log(x));

전체 배열을 한 번에 인쇄합니다.

반면에

Observable.from([1, 2, 3]).subscribe(x => console.log(x));

요소 1을 1로 인쇄합니다.

문자열의 경우 동작은 동일하지만 문자 수준입니다.


Observable.of (1, 2, 3) .subscribe (x => console.log (x));
xiaoke

1
@xiaoke 그렇다면 반드시 3 개의 개별 배출물입니다 (1, 2, 3).
Tsvetan Ovedenski

16

또 다른 흥미로운 사실은 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 ([])으로 바꾸면 후속 메소드가 호출되지 않습니다.

rxfiddle


6

한 줄 차이 :

       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'


0

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.