2017-01-16 145 views
1

我想訂閱可觀察到的一個組件的初始化像這樣:角2可觀察訂閱不工作

this.ticketService.getTicketsAsync(filters).subscribe(
     tickets => this.ticketResponse = tickets, 
     () => console.log('hi')) 

是否有任何理由爲什麼第一個lambda表達式的作品,但第二個從來不?

編輯:

下面是代碼帽子getTicketAsync將返回:

getTicketsAsync(ticketFilters : TicketSearch): Observable<TicketResponse> { 

    let api_endpoint = AppSettings.API_ENDPOINT + 'WebReport/request_report' 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({headers : headers, withCredentials : true}); 
    return this.http.post(api_endpoint, ticketFilters, options).map(this.extractData).catch(this.handleError); 





} 
+0

什麼是'getTicketsAsync',它是否返回'Observable'?請解釋*爲什麼第一個lambda表達式有效,但第二個從未做過?*? –

+0

@Pankaj Parkar是的,它返回一個可觀察的。我現在會發布代碼 –

回答

2

第二個是catch時觀察到的罰球錯誤。

subscription = source.subscribe(
    x => console.log('onNext: %s', x), 
    e => console.log('onError: %s', e), 
() => console.log('onCompleted')); 

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/subscribe.md

解決方案: 1.使用onNext鉤:

this.ticketService.getTicketsAsync(filters).subscribe(
     tickets => { 
      this.ticketResponse = tickets; 
      console.log('hi'); 
     }, 
     () => console.log('ERROR!')) 
  • 使用onCompleted鉤:

    此。 ticketService.getTicketsAsync(過濾器)。訂閱( 門票=> this.ticketResponse =門票, 誤差=>的console.log( 'ERROR:' +誤差), ()=>的console.log( 'HI') )

  • 0

    大箭頭代表使你的代碼像這樣的功能

    this.ticketService.getTicketsAsync(filters) 
    .subscribe(
        function(tickets){ 
        this.ticketResponse = tickets, 
        function(){ 
         console.log("hi") 
        } 
        } 
    ) 
    

    你傳遞了​​兩個參數(它們是兩個回調函數)。

    +0

    但Observable返回3個回調鉤子:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/subscribe.md –

    +0

    但你不必一直傳遞3個參數, – Jassi