返回一个空的 Observable

新手上路,请多包涵

函数 more() 应该从 get 请求返回一个 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();
    });
  };
}

在这种情况下,我只能在 hasMore() 为真时发出请求,否则在 subscribe() 函数 subscribe is not defined 上出现错误,我如何返回一个空的 Observable?

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

原文由 Murhaf Sousli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

由于所有答案都已过时,因此我将在此处发布最新答案

在 RXJS >= 6

 import { EMPTY } from 'rxjs'
return EMPTY;

原文由 Murhaf Sousli 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用所有不同的方式返回空的 observable,但挑战是使用预期的类型返回它 - 这是创建具有类型的空 observable 的方法 -

 intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

return next.handle(this.setHeaders(req))
            .pipe(
                catchError((error: HttpErrorResponse) => {
        // you write your logic and return empty response if required
        return new Observable<HttpEvent<any>>();
            }));
    }

原文由 viveksharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题