2017-09-04 70 views
0

以下是我的API调用,我必须拦截器在两者之​​间,所以我正从localStorage的这个数据。数据被字符串化并保存。当我将它返回时,我通过observable.of(cachedata)转换为可观察的。无法使用的可观察数据订阅

getApplications(userid: string): Observable<any> { 
    let data =this.httpclient.get(this._getAPIUrl('user/' + userid + '/applications')) 
     .map((res: Response) => res.json()) 
     return data; 
    } 

我把它叫做从组件

ngOnInit() { 
     const userid = this.platformService.currentUserId; 
     console.log(this.platformService.getApplications(userid)); 
} 

它打印结果

Observable {_isScalar: false, source: Observable, operator: MapOperator} 

如果我订阅这个呼叫数据并没有得到使用。

this.platformService.getApplications(userid) 
    .subscribe(applications => { 
      console.log('app ' + applications); 
      const menuItems: MenuItem[] = []; 
      menuItems.push(
       new MenuHeaderItem({ 
        type: MenuItemType.Header, 
        title: 'Applications', 
        description: null 
       })); 
      Object.keys(applications).map(element => { 
       menuItems.push(this.formatconversion(applications[element])); 
      }); 
      this.menu = menuItems; 
     }); 

console.log('app'+ applications)not coming。

任何帮助将不胜感激。提前致谢。

+0

你的代码似乎在一定意义上有效,在认购的代码块应该叫一旦HTTP获得通话已成功解决。你在控制台中是否有任何错误? – Fjut

回答

0

我认为你有问题,你的代码 ,而不是这个

getApplications(userid: string): Observable<any> { 
let data =this.httpclient.get(this._getAPIUrl('user/' + userid + '/applications')) 
    .map((res: Response) => res.json()) 
    return data; 

}

使用本

getApplications(userid: string): Observable<any> { 
this.httpclient.get(this._getAPIUrl('user/' + userid + '/applications')) 
    .map((res: Response) => res.json()) 

}

没有必要的返回的。

res.json() 

将返回什么都is.try此服务器的响应,并让我知道,如果它的工作:)

+0

它不工作,错误性质“订阅”不会对类型“无效”来 –

+0

getApplications(用户名:字符串){存在 this.httpclient.get(this._getAPIUrl(“用户/” +用户ID +“/应用程序”) ) .MAP((RES:响应)=> res.json())}尝试this.for我的工作。 –

+0

在我来说,我正在从本地存储这个对象,我是节约HttpResponse对象和检索回其保存在字符串。所以这里的问题是httpresponse对象不能保存为字符串格式,如果我这样做,它不能解析正常的对象。我得到无效的json转换为js对象。这是问题。 –