Angular 2 observable-subscribe показывает неопределенное значение

У меня та же проблема, что и в сообщении SO здесь Я получаю неопределенность в методе подписки в моем component.ts, хотя в моей службе у меня есть данные. См. коды ниже p.component.ts

 private getPayItems():void{
    console.log('In getPayItems');
    this._payItemService.getPayItems()
    .subscribe(data => { 
        this.payItemArray = data;
        console.log(data);
    },
    (error:any) =>{
         this.alerts.push({ msg: error, type: 'danger', closable: true }); 
    }) 
}

p.service.ts

getPayItems():Observable<Payitem[]>{

    let  actionUrl = this.url +  "/GetPayItem";

    return this._http.get(actionUrl, { headers: this.headers })
        .map((response: Response) => { 
            <Payitem[]>response.json() ;
             console.log(<Payitem[]>response.json()); //This logs the Object
        })
        .catch(this.handleError);
}

person mayowa ogundele    schedule 22.11.2016    source источник


Ответы (1)


Поскольку вы использовали {}, требуется явный возврат из function. Таким образом, вы должны вернуть <Payitem[]>response.json() из функции map.

getPayItems():Observable<Payitem[]>{

    let  actionUrl = this.url +  "/GetPayItem";

    return this._http.get(actionUrl, { headers: this.headers })
        .map((response: Response) => { 
             console.log(<Payitem[]>response.json()); //This logs the Object
            return <Payitem[]>response.json() ;
        })
        .catch(this.handleError);
}

В противном случае ниже будет сокращенный синтаксис

getPayItems():Observable<Payitem[]>{
    let  actionUrl = `${this.url}/GetPayItem`;
    return this._http.get(actionUrl, { headers: this.headers })
        .map((response: Response) => <Payitem[]>response.json())
        .catch(this.handleError);
}
person Pankaj Parkar    schedule 22.11.2016
comment
Вы только что спасли мой день, сэр! Спасибо - person Steven X; 14.05.2017