2017-07-18 40 views
2
getNews(newsType : any){ 

this.storage.get("USER_INFO").then(right=>{ 
this.storage.get("sessionkey").then(temp=>{ 
this.email = JSON.parse(right).email; 
this.newkey = temp; 
this.authentification =JSON.stringify("Basic " + btoa(this.email+":"+ this.newkey+":"+key)); 
    const body = newsType; 
    let headers = new Headers({ 
     'Content-Type': 'application/json; charset=UTF-8', 
     'Authorization': this.authentification 
    }); 

    let options = new RequestOptions({headers : headers}); 
    return this.http.post('http://api/getNews',body,options) 
    .map((data:Response) => data.json()); 

}, err =>{console.log("error on sessionkey",err)}) 
}, err =>{console.log("error on user",err)}) 

    } 


this.httpService.getNews(JSON.stringify(this.category)).subscribe(data => { 
     this.news = data.News; 
    }); 
    }, err => { 
     console.log("Error:", err) 
    }); 

我想在嵌套函数成功后调用Api。 但是,当我在函数成功回调中执行它时,它给我错误,属性'订阅'不存在类型'void'上。属性“订阅”不存在类型'无效'角2中

我怎样才能返回API的价值,从服务到另一个.ts文

+0

正如@Maximus说你要在父母返回的数据(外)级嵌套函数内部'返回this.storage。得到(“USER_INFO”)' – nivas

+0

嘿,考虑接受[我的回答](https://stackoverflow.com/a/45160956/2545680)如果它帮助 –

回答

-1

您需要添加返回类型getNews()方法

getNews(args): Observable<any> { 
    // your code 
} 

你需要指定返回类型。
您可以导入从第三方软件包可观察的rxjs

import { Observable } from 'rxjs/Observable'; 
+0

不需要指定返回类型。这里的问题是它返回undefined。 –

+0

“'订阅'不存在类型'无效'”,根据问题。 它不是“不能读取未定义的订阅属性”。 –

+0

这意味着他不会从方法中返回任何东西。当你仍然返回'null'时添加一个返回类型将不会有任何帮助,除了指定的错误。 –

3

你错过return在这里的讲话:

getNews(newsType : any){ 
    return this.storage.get('USER_INFO').then(right => { 
    ^^^^^^ 

然而,这仍然会返回一个承诺没有subscribe方法。为了总结一个承诺结果变成可观察到的,你可以用from方法:

getNews(newsType : any){ 
    return Observable.from(this.storage.get('USER_INFO').then(right => { 
0

这是为我工作的解决方案。

this.httpService.getNews(JSON.stringify(this.category)).subscribe(data => { 
     this.news = data.News; 
    }}, err => { 
     console.log("Error:", err) 
    }); 



getNews(newsType :any) : Observable<any> { 
    return Observable.create(observer => { 
    this.storage.get("USER_INFO").then(right=>{ 
this.storage.get("sessionkey").then(temp=>{ 
this.email = JSON.parse(right).email; 
    let authentification =JSON.stringify("Basic " + btoa(this.email+":"+ temp+":"+key)); 
     const body = newsType; 
    let headers = new Headers({ 
     'Content-Type': 'application/json; charset=UTF-8', 
     'Authorization': authentification 
    }); 

    let options = new RequestOptions({headers : headers}); 
    this.http.post('http:api/getNews',body,options).subscribe(data =>{ 
     observer.next(data.json()); 
     observer.complete(); 
    }); 
}, err =>{console.log("error on sessionkey",err)}) 
}, err =>{console.log("error on user",err)}) 
}) } 

感谢@Maximus和@Theophilus Omoregbee

链接:How to create an observable in Angular 2

相关问题