返回一个空的Observable

2020/10/22 21:41 · javascript ·  · 0评论

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

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()function上遇到错误subscribe is not defined,如何返回可观察到的空值?

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

更新资料

在RXJS 6中

import { EMPTY } from 'rxjs'

return EMPTY; 

对于打字稿,您可以像这样为空的Observable指定通用参数:

import 'rxjs/add/observable/empty' 

Observable.empty<Response>();

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

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

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

RxJS6(未安装兼容软件包)

现在有一个EMPTY常数和一个empty函数。

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

  var delay = empty().pipe(delay(1000));     
  var delay2 = EMPTY.pipe(delay(1000));

Observable.empty() 不再存在。

就我使用Angular2和rxjs而言,它适用于:

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

是的,有一个空运算符

Rx.Observable.empty();

对于打字稿,您可以使用from

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

创建Empty Observable的几种方法:

它们只是在您进一步使用它的方式上有所不同(它将在nextcomplete之后发出什么事件do nothing例如:

  • Observable.never() -不发出任何事件,并且永远不会结束。
  • Observable.empty()-仅发出complete
  • Observable.of({})-同时发出nextcomplete(作为示例传递的空对象文字)。

根据您的实际需求使用它)

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

Observable.of('');

// or
Observable.of({});

// etc

或者你可以尝试ignoreElements()以及

来到这里有一个类似的问题,以上内容对我不起作用:"rxjs": "^6.0.0",为了生成一个可观察的对象,它不发出我需要做的数据:

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

RxJS 6

您也可以从下面的函数中使用:

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

导入后:

import {from} from 'rxjs';

尝试这个

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();
本文地址:http://javascript.askforanswer.com/fanhuiyigekongdeobservable.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!