在http请求之前未设置离子2标头

时间:2017-07-06 08:50:14

标签: angular typescript asynchronous ionic2

我向我的后端发出以下请求:

loggedIn() {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    this.getToken().then((val) => {
        headers.append('X-Auth-Token', val);
    });
    const options = new RequestOptions({headers: headers});
    let seq = this.api.post('/login', null, options).share();
    seq.map((res: Response) => res.json())
        .subscribe(res => {

        }, err => {
            console.log("HEADERS ------- ", options.headers);
        });
    return seq;
};

有时'X-Auth-Token'未被设置。怎样才能确保标题被设置?

getToken()看​​起来像这样:

getToken() {
    return this.storage.get('token').then((value) => {
        return value;
    });
}

调用loggedIn()的方法如下所示:

checkIfLoggedIn() {
    this.user.loggedIn()
        .subscribe((res) => {
            console.log("LoginPage RETURN VALUE --------------- ", res);
        }, (err) => {
            console.log("LoginPage RETURN ERROR --------------- ", err);
        });
}

2 个答案:

答案 0 :(得分:0)

更新您的代码以确保标头有数据后的api帖子

loggedIn() {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    this.getToken().then((val) => {
        headers.append('X-Auth-Token', val);
         const options = new RequestOptions({headers: headers});
         let seq = this.api.post('/login', null, options).share();
         seq.map((res: Response) => res.json())
            .subscribe(res => {

            }, err => {
                console.log("HEADERS ------- ", options.headers);
            });
        return seq;
    });

};

答案 1 :(得分:0)

我有同样的问题,但我正在使用离子3.这实际上是因为js代码的异步方式。我从其他stackoverflow问题中找到答案,这将帮助您解决这个问题。

https://stackoverflow.com/a/45298747/2036977