2017-01-16 144 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