返回空的可观察量

2022-08-30 00:44:07

该函数应该从 get 请求返回more()Observable

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();
    });
  };
}

在这种情况下,如果为 true,我只能执行请求,否则我在函数上收到错误,如何返回空的 Observable?hasMore()subscribe()subscribe is not defined

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

答案 1

使用 RxJS 5.5+ 的新语法,这将变为如下所示:

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

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

empty(); // deprecated use EMPTY
EMPTY;
of({});

只需记住一件事,完成可观察性,因此它不会在您的流中触发,而只会完成。因此,例如,如果您有 ,它们可能不会像您希望的那样触发(请参阅下面的示例)。EMPTYnexttap

而 创建 一个 并发出值为 next,然后完成 .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();

答案 2

对于 typescript,您可以指定空可观察量的泛型参数,如下所示:

import 'rxjs/add/observable/empty' 

Observable.empty<Response>();