지연으로 관찰 가능 항목을 생성하려면 어떻게해야합니까?
질문
테스트 목적으로 Observable
실제 http 호출에 의해 반환되는 Observable을 Http
.
내 관찰 가능 항목은 다음 코드로 생성됩니다.
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
});
문제는이 관찰 가능한 것이 즉시 방출된다는 것입니다. 방출에 사용자 지정 지연을 추가하는 방법이 있습니까?
과정
나는 이것을 시도했다 :
fakeObservable = Observable.create(obs => {
setTimeout(() => {
obs.next([1, 2, 3]);
obs.complete();
}, 100);
});
그러나 작동하지 않는 것 같습니다.
다음 가져 오기 사용 :
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';
이 시도:
let fakeResponse = [1,2,3];
let delayedObservable = Observable.of(fakeResponse).delay(5000);
delayedObservable.subscribe(data => console.log(data));
업데이트 : RXJS 6
위의 솔루션은 RXJS의 최신 버전 (예 : 각도)에서는 더 이상 작동하지 않습니다.
그래서 시나리오는 API로 확인할 항목 배열이 있다는 것입니다. API는 단일 항목 만 허용하며 모든 요청을 한 번에 전송하여 API를 종료하고 싶지 않습니다. 따라서 중간에 약간의 지연이있는 Observable 스트림에서 항목의 시간 제한 릴리스가 필요합니다.
다음 가져 오기를 사용하십시오.
import { from, of } from 'rxjs';
import { delay } from 'rxjs/internal/operators';
import { concatMap } from 'rxjs/internal/operators';
그런 다음 다음 코드를 사용하십시오.
const myArray = [1,2,3,4];
from(myArray).pipe(
concatMap( item => of(item).pipe ( delay( 1000 ) ))
).subscribe ( timedItem => {
console.log(timedItem)
});
기본적으로 배열의 모든 항목에 대해 새로운 '지연된'Observable을 생성합니다. 다른 많은 방법이있을 수 있지만 이것은 나에게 잘 작동했으며 '새로운'RXJS 형식을 준수합니다.
RxJS 5+에서는 이렇게 할 수 있습니다.
import { Observable } from "rxjs/Observable";
import { of } from "rxjs/observable/of";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
RxJS 6+에서
import { of } from "rxjs";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
대답하기 조금 늦었지만 누군가가이 질문에 답을 찾기 위해 돌아올 수도 있습니다.
'delay'는 Observable의 속성 (함수)입니다.
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
}).delay(3000);
이것은 나를 위해 일했습니다 ...
원하는 것은 타이머입니다.
// RxJS v6+
import { timer } from 'rxjs';
//emit [1, 2, 3] after 1 second.
const source = timer(1000).map(([1, 2, 3]);
//output: [1, 2, 3]
const subscribe = source.subscribe(val => console.log(val));
import * as Rx from 'rxjs/Rx';
타격 코드가 작동하도록 위의 가져 오기를 추가해야합니다.
Let obs = Rx.Observable
.interval(1000).take(3);
obs.subscribe(value => console.log('Subscriber: ' + value));
참고 URL : https://stackoverflow.com/questions/42413969/how-can-i-create-an-observable-with-a-delay
'Programing' 카테고리의 다른 글
애플리케이션 컨텍스트 초기화 이벤트에 후크를 추가하는 방법은 무엇입니까? (0) | 2020.11.26 |
---|---|
dplyr의 문자열 열에서 여러 값 필터링 (0) | 2020.11.26 |
Angular 4+ : 경로로 수동 리디렉션 (0) | 2020.11.26 |
한 테이블에서 다른 테이블로 SQL 데이터 이동 (0) | 2020.11.26 |
사파리 및 크롬 자바 스크립트 콘솔 여러 줄 (0) | 2020.11.26 |