명령 식 에서 응답 식 까지 (3)
Observable -- 가관 측정 시퀀스
1 절 에서 push 유형의 시스템 과 pull 유형의 시스템 을 소 개 했 는데 모두 값 을 만 들 수 있 습 니 다.
단일 값 생 성
여러 값 생 성
pull
function
iterator
push
promise
?
es6 에서 promise 는 이미 원생 의 지 지 를 받 았 지만 push 시스템 에서 여러 개의 값 을 만 드 는 원생 의 방법 이 없어 Observable 은 이 공백 을 보충 했다.
// observable
const observable = Rx.Observable.create(function(observer) {
observer.next(1);
observer.next(2);
observer.next(3);
setTimeout(() => {
observer.next(4);
observer.complete();
},1000);
});
console.log('just before subscribe');
// subscribe observable
observable.subscribe({
next: x => console.log('got value ' + x),
error: err => console.error('something wrong occurred: ' + err),
complete: () => console.log('done'),
});
console.log('just after subscribe);
이 코드 를 실행 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.
just before subscribe
got value 1
got value 2
got value 3
just after subscribe
got value 4
done
결 과 를 통 해 알 수 있 듯 이 한 번 의 구독 을 통 해 저 희 는 observable 에서 보 내 온 모든 값 을 얻 을 수 있 습 니 다. 또한 출력 순 서 를 살 펴 보 세 요. 1, 2, 3 은 after 전에 있 고 4 는 after 후에 observable 이 보 내 는 값 이 반드시 비동기 나 같은 단계 가 아니 라 언제 가 져 올 수 있 는 지 는 어떤 방식 으로 보 내 느 냐 에 달 려 있 습 니 다.
위의 코드 중 몇 가지 설명 이 필요 할 수 있 습 니 다.
x => console.log('got value ' + x),
err => console.error('something wrong occurred: ' + err),
() => console.log('done'),
라 고 쓸 수 있 습 니 다.첫 번 째 매개 변 수 는 next 알림 을 처리 하고 두 번 째 매개 변 수 는 error 알림 을 처리 합 니 다. 세 번 째 매개 변 수 는 complete 알림 을 처리 할 지 여 부 를 선택 할 수 있 습 니 다. 즉, 두 번 째, 세 번 째 매개 변 수 는 생략 할 수 있 습 니 다.물론 rxjs 내부 에 서 는 우리 가 들 어 온 매개 변 수 를 그 관찰자 대상 으로 처리 할 것 이다.
상기 코드 에서 저 희 는 observable 생 성 (create 를 통 해), 구독 (subscribe 를 통 해), 실행 (next 와 complete 호출) 과정 을 실 행 했 습 니 다.그 밖 에 우리 가 구독 을 필요 로 하지 않 을 때 관찰 자 는 안전하게 탈퇴 할 수 있어 야 한다.
subscription
이것 이 바로 우리 가 구독 을 취소 할 때 필요 한 것 입 니 다. 위의 구독 코드 의 완전한 작성 방법 은 다음 과 같 습 니 다.
const subscription = observable.subscribe({...});
이것 은 우리 가 observable 을 구독 한 후에 얻 은 것 입 니 다. 즉, subscribe 방법의 반환 값 입 니 다. 그 위 에 세 가지 중요 한 방법 이 있 습 니 다.
.add(observable.subscribe({...}))
.add(observable.subscribe({...}));
subject
이것 은 observable 이자 observer 이기 때문에 subscribe 에 의 해 next, error, complete 를 통 해 발사 할 수 있 습 니 다.다음 예 에서 우 리 는 Subject 에 두 명의 관찰 자 를 추가 한 다음 에 값 을 추가 합 니 다.
const subject = new Rx.Subject();
subject.subscribe({
next: v => console.log('observerA: ' + v)
});
subject.subscribe({
next: v => console.log('observerB: ' + v)
});
subject.next(1);
subject.next(2);
실행 후 출력:
observerA: 1
observerB: 1
observerA: 2
observerB: 2
Subject Observer , Observable subscribe :
var subject = new Rx.Subject();
subject.subscribe({
next: v => console.log('observerA: ' + v)
});
subject.subscribe({
next: v => console.log('observerB: ' + v)
});
var observable = Rx.Observable.from([1,2,3]);
observable.subscribe(subject); // Subject Observable
실행 후 출력:
observerA: 1
observerB: 1
observerA: 2
observerB: 2
observerA: 3
observerB: 3
위의 방법 을 통 해 우 리 는 기본적으로 Subject 를 통 해 단일 방송 인 Observable 을 멀티캐스트 로 바 꾸 었 다.이 예 는 단지 하나의 실행 문맥 을 여러 관찰자 에 게 공유 하 는 방법 을 보 여 주 는 것 일 뿐이다.
위의 코드 에는 from 방법 이 있 는데 그 역할 은 바로 관측 가능 한 서열 을 만 드 는 것 이다. 예전 의 create 방법 과 유사 하지만 더욱 간결 하 다. rxjs 에서 조작 자 라 는 전문 적 인 이름 이 있 는데 여러 가지 조작 자 를 통 해 우 리 는 관측 가능 한 서열 의 생 성 을 실현 하고 서열 중의 데 이 터 를 여러 가지 변환 할 수 있다.rxjs 를 사용 할 때 우 리 는 대부분 다양한 조작 부 호 를 사용한다 고 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.