如何从有角度的http客户端(角度5)的结果中获取布尔值?

时间:2018-11-25 10:19:08

标签: angular rest httpresponse

我有带有以下服务呼叫的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值。enter image description here

1 个答案:

答案 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块中来更新了答案。