我有带有以下服务呼叫的Angular 5应用程序:
let isExist: boolean;
this.http.get<Boolean>(`${this.baseUrl}/Trips/TripExist`, {
headers: new HttpHeaders({ 'Accept': 'text/plain', 'Content-Type': 'text/plain' }),
params: {id: id, name: name},
observe: 'response'
}).subscribe(
data => { isExist = data.body;
console.log(data);
},
err => console. error(err)
);
if (isExist == true) {
Console....
}
其余api如下:
@GET
@Produces("text/plain")
@Path("TripExist")
public boolean isTripExist(@QueryParam("id") String id,
@QueryParam("name") String name) {
return tripDao.isTripExist(name, id);
}
我在控制台中获取一个带有boolean值的HttpResponse,但我不知道如何获取该值并将其分配给一个boolean值。
答案 0 :(得分:0)
我不确定您为什么要在其中传递observe
选项。我假设您想读取响应上的一些标头或其他元数据。请记住,完成{ observe: 'response' }
后,您将获得带有很多字段的完整Response对象。但是您只需要关注body
字段。
所以您可以这样阅读:
let isExist: boolean;
this.http.get(`${this.baseUrl}/Trips/TripExist`, {
headers: new HttpHeaders({
'Accept': 'text/plain',
'Content-Type': 'text/plain'
}),
params: {
id: id,
name: name
},
observe: 'response'
}).subscribe(
data => {
isExist = data.body; // HERE data.body will have the boolean that you're looking for.
console.log(data);
console.log(isExist);
if (isExist === true) { console.... }
},
err => console.error(err)
);
如果if
条件不在subscribe
块之外,它将不起作用。订阅块中的代码异步运行,即在完成API调用并接收到响应之后。但是if
条件将同步运行,即在subscribe
块之前。因此,当控件达到您的if
条件时,isExist
变量仍将是undefined
,因为它尚未初始化,只能在运行以下命令的subscribe
块中进行初始化: strong>之后执行了if
条件。
我已经将if
条件移动到subscribe
块中来更新了答案。