2016-07-24 54 views
47

功能more()空观察到的是应该从一个GET请求如何返回rxjs

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()是真的返回一个Observable,否则我得到一个错误在subscribe()函数subscribe is not defined,我怎样才能返回一个空的可观察?

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

你有解决方案吗?你能写些什么在这里。hasMore() – Rohitesh

+0

@Rohitesh'hasMore(){return currentPage

回答

60

为打字稿,你可以指定你的空观察到的通用PARAM这样的:

Observable.empty<Response>(); 
20

是的,有我Empty操作

Rx.Observable.empty(); 

为打字稿,您可以使用from

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

我得到'Rx.Observable <{}>'不可分配给'Observable ',我试图'Rx.Observable .empty()'但它没有工作 –

+0

@MurhafSousli我添加了脚本代码 –

+0

我将返回类型更改为'Observable ',它工作,谢谢队友。 –

6

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

Observable.of(''); 

// or 
Observable.of({}); 

// etc 
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(); 
1

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

22

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

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

包含它与'rxjs/observable/EmptyObservable'的'import {EmptyObservable};' – Kildareflare

+0

得到像这样的错误,我需要在system-config中配置任何东西吗? 未处理的Promise拒绝:(SystemJS)XHR错误(404 Not Found)加载http:// localhost:9190/node_modules/rxjs/Observable/EmptyObservable.js \t错误:XHR错误(404 Not Found)加载http:// localhost :9190/node_modules/rxjs /可观察/ EmptyObservable.js – user630209

8

与n新语法例如rxjs 5.5+,这成为如下:

import { empty } from "rxjs/observable/empty"; 
import { of } from "rxjs/observable/of"; 

empty(); 
of({}); 

只是有一点要记住,empty()完成可观的,所以不会触发流中next,只完成了!因此,如果你有tap例如他们可能不会触发你想要的(见下面的例子)。

of({})创建一个observable并发射下一个值为{},它将不会完成单独的观察,也许你应该做of({}).pipe(take(1))发射和完成。

例如

empty().pipe(
    tap(() => console.warn("i will not reach here, as i am complete")) 
).subscribe(); 

of({}).pipe(
    take(1), 
    tap(() => console.warn("i will reach here")) 
).subscribe();