지연이 있는 관찰 가능 요소를 만들려면 어떻게 해야 합니까?
질문.
테스트 목적으로,Observable
실제 http 콜에 의해 반환되는 관찰 가능한 것을 대체하는 오브젝트Http
.
My observatible은 다음 코드로 생성됩니다.
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를 종료하고 싶지 않습니다.그래서 저는 옵저버블 스트림에 대한 아이템의 출시 간격을 조금 두고 출시해야 합니다.
다음 가져오기를 사용합니다.
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)
});
기본적으로 어레이의 모든 항목에 대해 새로운 '지연된' 관찰 가능 항목이 생성됩니다.그 밖에도 여러 가지 방법이 있을 수 있지만, 저는 이 방법이 잘 작동하여 '새로운' RXJS 포맷에 준거하고 있습니다.
RxJ 5+에서는 다음과 같이 할 수 있습니다.
import { Observable } from "rxjs/Observable";
import { of } from "rxjs/observable/of";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
RxJ 6 이상
import { of } from "rxjs";
import { delay } from "rxjs/operators";
fakeObservable = of('dummy').pipe(delay(5000));
방출된 각 값을 지연시키려면
from([1, 2, 3]).pipe(concatMap(item => of(item).pipe(delay(1000))));
네가 원하는 건 타이머야
// 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));
답하기엔 조금 늦었지만... 만약을 위해 누군가 답을 찾고 있는 이 질문으로 돌아갈지도 모른다.
'delay'는 관찰 가능한 속성(함수)입니다.
fakeObservable = Observable.create(obs => {
obs.next([1, 2, 3]);
obs.complete();
}).delay(3000);
이건 나한테 효과가 있었어...
사용할 수 있습니다.asyncScheduler
는 작업을 JavaScript 이벤트루프 큐에 배치하여 비동기적으로 스케줄링합니다.작업을 시간 내에 지연하거나 반복 작업을 예약하는 데 가장 적합합니다.
import * as Rx from 'rxjs/Rx';
Blow code를 작동시키려면 위의 Import를 추가해야 합니다.
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' 카테고리의 다른 글
여러 값 중 하나를 가진 속성별 Angular.js ng-repeat 필터(값의 OR) (0) | 2023.02.28 |
---|---|
워드프레스 플러그인의 테이블에 다른 열 추가 (0) | 2023.02.23 |
"https://dc.services.visualstudio.com/v2/track"의 용도는 무엇입니까? (0) | 2023.02.23 |
Jackson을 사용하여 맵을 JSON으로 변환 (0) | 2023.02.23 |
각도에서의 DOM 조작 처리JS (0) | 2023.02.23 |