2016-10-02 168 views
1

我正在使用Ionic 2 Calendar来显示已从远程服务器订阅为json的课程时间。我试图从我的订阅中提取响应并将其放入数组,但是当将数据输出到console.log时,我得到“未定义”。如何从角度提取数据http.get.subscribe

的代码如下:

export class Calendar { 
    eventSource; 
    viewTitle; 

    constructor(private navController:NavController, private httpService:HttpService) { 
     var classes = []; 
     this.httpService.getCalendarConfig() 
      .subscribe(res => classes => res); 

     console.log(classes); 
    } 

注意,如果我改变.subscribe到:

.subscribe(res => console.log(res)); 

它显示了JSON,因为它应该在控制台中。

编辑:HTTPService类如下所示:

@Injectable() 
export class HttpService { 

    endpointUrl:string = '<address>'; 

    constructor(private http: Http) {} 

    getCalendarConfig() { 
     return this.http.get(this.endpointUrl + 'calendar.json') 
         .map(this.extractData) 
         .catch(this.handleError); 
    } 

    private extractData(res: Response) { 
     let body = res.json(); 
     return body || {}; 
    } 

    private handleError(error: any) { 
     let errMsg = (error.message) ? error.message : 
      error.status ? '${error.status} - ${error.statusText}' : 'Server error'; 
     console.error(errMsg); 
     return Observable.throw(errMsg); 
    } 

}

回答

2

因为你正在考虑classes价值,只要您对服务的调用适用。但这不适用于异步调用的方式。只要ajax完成,他们将始终提供输出。

你会得到内部this.httpService.getCalendarConfig()

var classes = []; 
this.httpService.getCalendarConfig() 
    .subscribe(res => { 
     classes => res; 
     console.log(classes); 
    }); 
+0

嗨@Pankaj Parkar认购的成功classes对象,谢谢你,已改善了这种情况,是因为它不再说“不确定”。但是现在控制台说:Array []。我是否分配了错误的数据类型? –

+0

您可以打开该阵列..你会得到它的元素 –

+0

嗨@Pankaj抱歉的延迟!你如何打开阵列? –