角度2 - 打字稿|变量在其他函数中不可用

时间:2016-05-21 07:09:06

标签: javascript function typescript angular components

这是我的第一篇文章,所以请温柔一点!

我刚开始使用TS& Angular 2几天前。现在我遇到了一个我觉得奇怪的问题。

这是我的代码:

import ...

@Injectable()
export class HttpService {
    imageArray : any;
    private _sessionToken : string;
    res: any;

constructor( private _http: Http) {

}

getUser():Promise<any> {
    console.log("Getting Post");
    let headers = new Headers();
    headers.append('X-Client-Token', 'XXXXXXXX');
    headers.append('Content-type', 'application/json');
    var data = JSON.stringify({
        "login": "XXXXXX",
        "password": "XXXXXXX"
    });

    return this._http.post('INSERT REST API', data, {headers: headers})
        .map(res => res.json())
        .map(this.doStuff)
        .toPromise()
}

doStuff(res) {
    this._sessionToken = res.token;
    console.log(this._sessionToken) ==> THIS WORKS !!!!! / EXISTS

}
getFilesForJob(jobId : string):Promise<any> {
    console.log(this._sessionToken); ==> THIS DOES NOT WORK !!!! / UNDEFIEND
    let headers = new Headers();
    headers.append('X-Client-Token', 'XXXX');
    headers.append('X-Session-Token', this._sessionToken);
    headers.append('Content-type', 'application/json');
    return this._http.get('INSERT RESTFULL API' + jobId + '/files', {headers: headers})
        .map(res => res.json())
        .toPromise();
}

所以,

问题是我无法在'this._sessionToken'中获取getFilesForJob(),在登录功能完成后调用此函数,并设置令牌。

但是当我在this._sessionToken内注销doStuff()时,我确实得到了我的会话令牌。

当我在getFilesForJob()中注销时,我得到了未定义的回复。但这些电话是在彼此之后进行的。

angular 2 / typescript是否使用组件实例?这将是我的解释为什么这不起作用。但我该如何解决呢? 我在这做错了什么?这是关于私人/公共的吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,这里有一些可以发挥作用的东西。如何调用getFilesForJob?最可能的情况是this未正确设置。尝试在此行之前设置debugger

console.log(this._sessionToken); ==> THIS DOES NOT WORK !!!! / UNDEFIEND

并查看是否this: HttpService定义了所有方法。如果不是,那么您已经失去了this的范围,并且有很多方法可以确保this绑定到HttpService - 但它取决于如何调用此方法。

另外,您是否创建了此类的实例?如果您没有 - 并且您在外部调用此类,即HttpService.getFilesForJob(),那么您必须将方法作为static作为前缀。