angular - "_this.http is undefined"无缘无故

标签 angular typescript http ionic-framework

在我的 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/

相关文章:

angular - 如何将一个 formGroup 添加到另一个 formGroup

angular - Electron Angular 2和aws放大

javascript - TS2339 : Property 'props' does not exist on type '{}'

http - 如何通过 Julia HTTP 访问 API

css - <div (click) ="handler()"> 在 edge 中不起作用,但在 IE11 和其他浏览器中起作用

使用 RxJS 的 Angular 2 轮询

javascript - 在 Angular 2 和 Typescript 中创建日期扩展

TypeScript:从接口(interface)方法返回类的实例

python - 执行谷歌搜索并返回结果数

java - 警报对话框中的 HTTP 链接不起作用