2016-07-24 33 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();