rxjs에서 asObservable ()을 언제 사용합니까?
나는 무엇을 사용하는지 궁금합니다 asObservable
.
문서에 따라 :
소스 시퀀스의 ID를 숨기는 관찰 가능한 시퀀스입니다.
하지만 왜 시퀀스를 숨겨야할까요?
Subject.prototype.asObservable ()을 사용하는 경우
이것의 목적은 API에서 주제의 "관찰자 측"이 유출되는 것을 방지하는 것입니다. 기본적으로 사람들이 결과 관찰 대상에 "다음"으로 들어가는 것을 원하지 않을 때 누출 된 추상화를 방지합니다.
예
(참고 : 이것은 실제로 이와 같은 데이터 소스를 Observable로 만드는 방법이 아닙니다. 대신 new Observable
생성자를 사용해야합니다 . 아래 참조).
const myAPI = {
getData: () => {
const subject = new Subject();
const source = new SomeWeirdDataSource();
source.onMessage = (data) => subject.next({ type: 'message', data });
source.onOtherMessage = (data) => subject.next({ type: 'othermessage', data });
return subject.asObservable();
}
};
이제 누군가가 관찰 가능한 결과를 얻으면 결과에 가치를 둘 myAPI.getData()
수 없습니다 next
.
const result = myAPI.getData();
result.next('LOL hax!'); // throws an error because `next` doesn't exist
new Observable()
하지만 일반적으로을 사용해야합니다.
위의 예에서 우리는 의도하지 않은 무언가를 만들고있을 것입니다. 하나를 들어, getData()
대부분의 관찰 가능한처럼 게으른 것이 아니라,이 기본 데이터 소스 만들 것 SomeWeirdDataSource
즉시 (그리고 아마도 몇 가지 부작용). 이것은 또한 당신 retry
이나 repeat
결과적으로 관찰 가능한 것이 당신이 생각하는 것처럼 작동하지 않을 것임을 의미합니다.
다음과 같이 Observable 내에서 데이터 소스 생성을 캡슐화하는 것이 좋습니다.
const myAPI = {
getData: () => return new Observable(subscriber => {
const source = new SomeWeirdDataSource();
source.onMessage = (data) => subject.next({ type: 'message', data });
source.onOtherMessage = (data) => subject.next({ type: 'othermessage', data });
return () => {
// Even better, now we can tear down the data source for cancellation!
source.destroy();
};
});
}
위의 코드를 사용하면 RxJS의 기존 연산자를 사용하여 관찰 가능 항목 위에 "게으르지 않게"만드는 것을 포함한 모든 동작을 구성 할 수 있습니다.
A Subject
는 observer
및 observable
.
An Obervable
에는 두 가지 방법이 있습니다.
- 구독
- 구독 취소
을 구독 할 때마다 next , error 및 complete 메소드 가 있는를observable
받게 됩니다.observer
모든 구성 요소에서 스트림 소스를 공개적으로 사용할 수 없도록하려면 시퀀스를 숨겨야합니다. @BenLesh
의 예를 참조 할 수 있습니다 .
추신 : Reactive Javascript를 처음 사용했을 때 이해할 수 없었습니다 asObservable
. 기본 사항을 명확하게 이해하고 asObservable
. :)
참조 URL : https://stackoverflow.com/questions/36986548/when-to-use-asobservable-in-rxjs
'IT story' 카테고리의 다른 글
ADB가 응답하지 않습니다. (0) | 2021.01.05 |
---|---|
Xcode 7.0에서 프레임 워크 관련 경고 받기 (0) | 2021.01.05 |
PyPi가 더 이상 다운로드 통계를 표시하지 않는 이유는 무엇입니까? (0) | 2021.01.05 |
Windows 10 명령 프롬프트에서 git 로그 출력 인코딩 문제 (0) | 2021.01.05 |
컨트롤러 사양 알 수없는 키워드 : id (0) | 2021.01.05 |