[javascript] 빈 Observable을 반환

이 함수 more()Observableget 요청에서 를 반환해야합니다.

export class Collection{

    public more = (): Observable<Response> => {
       if (this.hasMore()) {

         return this.fetch();
       }
       else{
         // return empty observable
       }
    }

    private fetch = (): Observable<Response> => {
       return this.http.get('some-url').map(
          (res) => {
              return res.json();
          }
       );
    }
}

이 경우 hasMore()true 인 경우에만 요청을 할 수 있습니다 . 그렇지 않으면 subscribe()function에 오류가 발생 subscribe is not defined합니다. 빈 observable을 어떻게 반환 할 수 있습니까?

this.collection.more().subscribe(
   (res) =>{
       console.log(res);
   },
   (err) =>{
       console.log(err);
   }
)

최신 정보

RXJS 6에서

import { EMPTY } from 'rxjs'

return EMPTY; 



답변

typescript의 경우 다음과 같이 빈 관측 가능의 일반 매개 변수를 지정할 수 있습니다.

import 'rxjs/add/observable/empty'

Observable.empty<Response>();


답변

RxJS 5.5+의 새로운 구문을 사용하면 다음과 같이됩니다.

// RxJS 6
import { empty, of } from "rxjs";

// rxjs 5.5+ (<6)
import { empty } from "rxjs/observable/empty";
import { of } from "rxjs/observable/of";

empty();
of({});

명심해야 할 것은 empty()관찰 가능 항목을 완료 next하여 스트림에서 트리거하지 않고 완료하는 것입니다. 예를 들어tap 원하는 경우 트리거되지 않을 수 있습니다 (아래 예 참조).

반면 값을 사용하여 다음을 of({})생성하고 Observable다음 값을 생성합니다 {}.Observable .

예 :

empty().pipe(
    tap(() => console.warn("i will not reach here, as i am complete"))
).subscribe();

of({}).pipe(
    tap(() => console.warn("i will reach here and complete"))
).subscribe();


답변

RxJS6 (호환성 패키지가 설치되지 않은 상태)

이제 EMPTY상수와 empty함수가 있습니다.

  import { Observable, empty, of } from 'rxjs';

  var delay = empty().pipe(delay(1000));
  var delay2 = EMPTY.pipe(delay(1000));

Observable.empty() 더 이상 존재하지 않습니다.


답변

Angular2와 rxjs의 경우에는 다음과 같이 작동했습니다.

import {EmptyObservable} from 'rxjs/observable/EmptyObservable';
...
return new EmptyObservable();
...


답변

예, 연산자가 있습니다

Rx.Observable.empty();

typescript의 경우 다음을 사용할 수 있습니다 from.

Rx.Observable<Response>.from([])


답변

Empty Observable을 만드는 몇 가지 방법 :

그것들은 당신이 그것을 어떻게 더 사용할 것인가 (다음에 어떤 이벤트가 발생할지 : next, complete또는 do nothing)에 따라 다릅니다 .

  • Observable.never() -이벤트가 발생하지 않으며 끝나지 않습니다.
  • Observable.empty()-방출 만합니다 complete.
  • Observable.of({})nextcomplete(예 : 빈 객체 리터럴이 전달됨)을 모두 방출합니다 .

정확한 요구에 사용하십시오)


답변

예를 들어 Observable.of (empty_variable)을 반환 할 수 있습니다.

Observable.of('');

// or
Observable.of({});

// etc