Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular “\u this.http未定义”没有任何原因_Angular_Typescript_Http_Ionic Framework - Fatal编程技术网

Angular “\u this.http未定义”没有任何原因

Angular “\u this.http未定义”没有任何原因,angular,typescript,http,ionic-framework,Angular,Typescript,Http,Ionic Framework,在我的LoginProvider中,我使用了一个函数,该函数执行登录并将创建的会话作为承诺返回 @Injectable() export class LoginProvider { constructor(public http: HttpClient) { }; public async login(credentials: ICredentials): Promise<ISession> { let url: string = "https:

在我的LoginProvider中,我使用了一个函数,该函数执行登录并将创建的会话作为承诺返回

@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。我在构造函数中创建了它,因此它应该可以用于此函数,不是吗?

新承诺的内部引用的是新承诺对象,而不是LoginProvider实例

因此,与其这样做

new Promise<ISession>((resolve, reject) => {
    this.http.get(...)
})
别忘了导入'rxjs/add/operator/toPromise'

新承诺的这个内部引用的是新承诺对象,而不是LoginProvider实例

因此,与其这样做

new Promise<ISession>((resolve, reject) => {
    this.http.get(...)
})

别忘了导入'rxjs/add/operator/toPromise'

需要注意的一点是,@Injectable我猜这指的是你的LoginProvider之外的另一个范围。还有,为什么不使用rxjs来代替承诺呢?因为我可以使用我喜欢使用的等待承诺。还是有其他选择?是的,我想这里的示波器有一些问题。你真的应该接受戴维的建议,使用可观察的而不是承诺。我建议大家看一下这篇文章,在之前的课程中会显示promise版本,您如何调用登录函数?需要注意的一点是,@Injectable Im猜测这是指除LoginProvider之外的另一个作用域。还有,为什么不使用rxjs来代替承诺呢?因为我可以使用我喜欢使用的等待承诺。还是有其他选择?是的,我想这里的示波器有一些问题。你真的应该接受戴维的建议,使用可观察的而不是承诺。我建议看一下这篇文章,在之前的课程中展示了promise版本,您如何调用登录函数?避免创建毫无意义的promise是一个很好的建议,但您在这一点上是错误的。arrow函数绑定到词汇作用域good advice以避免无意义的承诺创建,但您对此的理解是错误的。arrow函数绑定到词法范围