在我的 LoginProvider 中,我使用了一个函数来执行登录并将创建的 session 作为 promise 返回。
@Injectable()
export class LoginProvider {
constructor(public http: HttpClient) { };
public async login(credentials: ICredentials): Promise<ISession> {
let url: string = "https:/url/to/login";
let headers: HttpHeaders = new HttpHeaders()
let params: HttpParams = new HttpParams()
.append("username", credentials.id)
.append("password", credentials.password);
return new Promise<ISession>((resolve, reject) => {
this.http.get(url, { headers: headers, params: params }).subscribe((response: ILoginResponse) => {
// handle response and return session
}, (error: HttpErrorResponse) => {
reject(error);
})
});
}
}
问题是不知何故 this.http
在调用时是未知的。调用该方法出现如下错误。
“_this.http 未定义”
而且我不知道为什么 http
应该在此函数中未定义。我在构造函数中创建它,所以它应该可用于此函数,不是吗?
最佳答案
new Promise
中的 this
指的是新的 Promise
对象而不是 LoginProvider
实例.
所以,而不是做
new Promise<ISession>((resolve, reject) => {
this.http.get(...)
})
你应该简单
return this.http.get(url, { headers: headers, params: params}).toPromise()
.then(response => // handle your response here then return your processed result);
(不要忘记导入'rxjs/add/operator/toPromise';)
关于angular - "_this.http is undefined"无缘无故,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753965/