我有一个身份验证类,我想返回一个true或false,但是使用可观察到的是异步,所以我不知道如何等待httpclient完成。
此时,对isLogin的调用将始终返回false。
import { Injectable } from '@angular/core';
import { HttpClient , HttpHeaderResponse, HttpHeaders, } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import { Subscription } from 'rxjs/Subscription';
class LoginData {
UserKey: string;
Password: string;
}
class TokenData {
token: string;
datetime: string;
}
@Injectable()
export class Authenticate {
private Url = 'http://192.168.1.1:6000';
constructor(private http: HttpClient) {}
public isLogin(userkey: string, password: string ): boolean {
const logindata = new LoginData();
logindata.UserKey = userkey;
logindata.Password = password;
const retval = false;
this.http.post<TokenData>(`${this.Url}/login`, logindata, {headers: this.getHeader()});
.subscribe(sub => {
if(sub.token)
{
localStorage.setItem('token',sub.token);
retval = true;
}
} );
return retval;
}
}发布于 2017-11-19 08:18:30
在javascript中不可能以同步的方式这样做。您必须更改isLogin调用方中的代码。除了实现某种回调之外,没有别的办法了。也许异步和等待关键字会有所帮助:
https://stackoverflow.com/questions/47373357
复制相似问题