Как получить логическое значение из результата в угловом http-клиенте (angular 5)? - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть приложение 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); 
}

Я получаю в консоли HttpResponse слогическое значение в теле, но я не знаю, как извлечь значение и присвоить его логическому значению. enter image description here

1 Ответ

0 голосов
/ 25 ноября 2018

Я не уверен, почему вы пропускаете опцию 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, который выполняется ПОСЛЕ the if условие выполнено.

Я обновил свой ответ с помощью условия if, перемещенного внутри блока subscribe.

...