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

当前回答

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

import 'rxjs/add/observable/empty' 

Observable.empty<Response>();

其他回答

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

Observable.of('');

// or
Observable.of({});

// etc

因为所有的答案都过时了,我将在这里发布最新的答案

在 RXJS 中 >= 6

import { EMPTY } from 'rxjs'
return EMPTY;

是的,有一个空操作符

Rx.Observable.empty();

对于typescript,你可以使用from:

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

创建Empty Observable的几种方法:

它们只是在你将如何进一步使用它(它将在:下一步,完成或不做之后发出什么事件)上有所不同,例如:

Observable.never()—不触发事件且永不结束。 Observable.empty() -只发出完整的。 Observable.of({}) -同时发出next和complete(以传递的空对象文字为例)。

用它来满足你的确切需求)

试试这个

export class Collection{
public more (): Observable<Response> {
   if (this.hasMore()) {
     return this.fetch();
   }
   else{
     return this.returnEmpty(); 
   }            
  }
public returnEmpty(): any {
    let subscription = source.subscribe(
      function (x) {
       console.log('Next: %s', x);
    },
    function (err) {
       console.log('Error: %s', err);
    },
    function () {
       console.log('Completed');
    });
    }
  }
let source = Observable.empty();