我有一个授权服务,我试图检查用户是否存在。
import { HttpClient } from "@angular/common/http";
import 'rxjs/Rx'
@Injectable()
export class AuthService {
constructor( private http : HttpClient) {}
registerUser(){
var temp = doesUserExist().subscribe(x => temp = x);
if(temp){
//register User logic
}
}
private doesUserExist(){
var endpoint = [myPath];
return this.http
.get(endpoint)
.map(payload => payload);
}
}
当我进入[myPath]时,我从服务器获得以下响应
[{"SqlResponse":"0"}]
我一直在遇到地图和订阅问题。在上面的实例中,我最终记录了一个Subscriber
对象。我尝试过在线发现的各种技术,包括
private doesUserExist(){
var endpoint = [myPath];
return this.http
.get(endpoint)
.map(payload => payload.json());
}
但是这种方法只是抱怨在类型'对象'上找不到json()。我读到.map已经将字符串转换为json,所以你不需要这个。我接下来要做的就是
private doesUserExist(){
var endpoint = [myPath];
return this.http
.get(endpoint)
.map(payload => payload[0]);
}
但是这在我的控制台中提供了相同的Subscription对象。我读到这是一个Observable,所以我开始尝试将其转换为Observable<boolean>
private doesUserExist() : Observable<boolean>{
var endpoint = [myPath];
return this.http
.get<boolean>(endpoint)
.map(payload => payload);
}
但是,我只是得到一个Subscriber
对象。
修改 当我尝试这种方法时......
var temp; doUserExist()。subscribe(x =&gt; {temp = x; console.log(temp);});
我仍然得到一个通用对象......如何在打字稿中访问它?
有人能指出我正确的方向吗?我认为你可以将结果映射到return,但我认为因为我得到一个JSON数组作为响应,它可能是问题的一部分。
答案 0 :(得分:0)
试试
private userExists: boolean;
private doesUserExist() : Observable<boolean>{
var endpoint = [myPath];
return this.http
.get(endpoint)
.map((resp:any) => resp.SqlResponse == "1");
}
registerUser(){
doesUserExist().subscribe(x =>
{console.log('User exists ',x);
let temp = x;
this.userExists = x;
});
}