Angular “\u this.http未定义”没有任何原因
在我的LoginProvider中,我使用了一个函数,该函数执行登录并将创建的会话作为承诺返回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:
@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函数绑定到词法范围