来自http请求的成功处理程序不会调用函数

时间:2016-10-27 10:00:06

标签: javascript angularjs angular typescript

我使用angular 2 http成功发布了一个帖子请求。

我遇到的问题是当我尝试从成功处理程序执行一个函数时。我从中得到的错误是:error_handler.js:48 EXCEPTION: this.setCookie is not a function

我的组件:

onSubmit(userData: any): void {
    this.user = new UserData(userData);
    this.services.getAccess(this.user).subscribe();
}

我的服务:

getAccess(user: UserData): any {
    let headers = new Headers();
    let client_id = 'fge432358768979fgwefg34f34';
    let credentials = 'grant_type=password&client_id=' + client_id + '&client_secret=' + user.secretKey + '&username=' + user.email + '&password=' + user.password;
    headers.append('Content-Type', 'application/x-www-form-urlencoded');

    return this.http.post(
        this.baseApiUrl + '/oauth/access_token',
        credentials,
        {
            headers: headers
        }
    )
        .map(this.handleSuccess)
        .catch(this.handleError);
}

handleError(error: Response | any) {
    console.log('error');
    swal("Oops...", 'The informations you’ve entered doesn’t match any account. ', "error");
    return Observable.throw(error);
}

handleSuccess(res: Response) {
    if (res.status === 200) {
        swal(
            {
                title: "Good job!",
                text: "You have successfully logged in.",
                timer: 2000,
                type: "success",
                showConfirmButton: false
            }
        );
        this.setCookie(res.json().access_token)
    }
}

setCookie(accessToken: string): void {
    this.cookie.setForOneHour(accessToken);
}

}

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您必须绑定this以保留上下文。

您可以使用

  1. .map(this.handleSuccess.bind(this))
  2. 使用箭头功能

    .map(data => this.handleSuccess(data))
    
  3. 请记住,这同样适用于.catch()