返回一个空的可观察对象。

263

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()返回true时发出请求,否则在subscribe()函数上会出现错误subscribe is not defined。那么我该如何返回一个空的Observable呢?
this.collection.more().subscribe(
  (res) => {
    console.log(res);
  }, (err) => {
    console.log(err);
  }
);
15个回答

2

RxJS 6

您也可以使用以下类似的 from 函数:

return from<string>([""]);

导入后:

import {from} from 'rxjs';

3
这将创建一个Observable,提供一个元素(一个空字符串),所以它看起来不像是对这个具体问题一个正确的答案。 - Bruno Medeiros

2

有一个类似的问题,上面的方法在我的情况下不起作用:"rxjs": "^6.0.0"。为了生成一个不发出数据的可观察对象,我需要执行以下操作:

import {Observable,empty} from 'rxjs';
class ActivatedRouteStub {
  params: Observable<any> = empty();
}

0

还有一个:EMPTY 常量

用 EMPTY 常量替换或安排(例如,安排([],调度程序))。将在 v8 中删除。(从phpstorm提示中获取此表单)


0

试试这个

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接