more()函数应该从get请求返回一个可观察对象

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()为真,否则我得到一个错误订阅()函数订阅没有定义,我怎么能返回一个空的可观察对象?

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

当前回答

或者您也可以尝试ignoreElements()

其他回答

对于typescript,你可以像这样指定空可观察对象的泛型参数:

import 'rxjs/add/observable/empty' 

Observable.empty<Response>();

在我使用Angular2和rxjs的情况下,它与:

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

返回空可观察对象的不同方法:

Observable.from ({}); Observable.of ({}); 空

https://www.learnrxjs.io/learn-rxjs/operators/creation/empty

RxJS6(未安装兼容包)

现在有一个EMPTY常量和一个空函数。

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

  //This is now deprecated
  var delay = empty().pipe(delay(1000));     
  var delay2 = EMPTY.pipe(delay(1000));

Observable.empty()不再存在。

例如,您可以返回Observable.of(empty_variable)

Observable.of('');

// or
Observable.of({});

// etc