Получить строковый ответ от Observable - PullRequest
0 голосов
/ 27 сентября 2019

Я получаю строку из бэкэнда:

String value = "{I am here}";

На моем сервисе:

getValue(): Observable<String> {
    return this.http.get<String>(this.myURL);
  }

На моем компоненте я подписываюсь:

String myMessage;

  getValue(): void {
    this.myService.getValue()
    .subscribe(message=> {
        this.myMessage= myMessage;
        console.log("WHY NOT ENTER HERE?)

);
  });

Что я делаю не так, даже не получая сообщения из console.log?

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Полагаю, вам нужно быть точным в отношении responseType, если вы хотите использовать строку.

Вот документ https://angular.io/guide/http#requesting-non-json-data

В вашем случае getValue должен сделать это:

return this.http.get(this.myURL, { responseType: 'text' });

Обратите внимание, что вам не нужно использовать <string>

0 голосов
/ 27 сентября 2019

Из того, что я вижу, в вашем коде есть ошибка, вероятно, причина, по которой вы не можете присвоить никакое значение myMessage:

Ваш код:

String myMessage;

  getValue(): void {
    this.myService.getValue()
    .subscribe(message=> {
        this.myMessage= myMessage;
        console.log("WHY NOT ENTER HERE?)

);
  });

Itдолжно быть:

String myMessage;

  getValue(): void {
    this.myService.getValue()
    .subscribe(message=> {
        this.myMessage= message;
        console.log("WHY NOT ENTER HERE?)

);
  });

Обратите внимание на часть присвоения значения в функции обратного вызова, вы использовали неверную переменную.

Надеюсь, это поможет.

0 голосов
/ 27 сентября 2019

На мой взгляд, у вас есть ошибка, поэтому установите раздел ошибок в вашей подписке, чтобы увидеть, что происходит, например:

getValue(): void {
   this.myService.getValue().subscribe(message => {
     this.myMessage = myMessage;
     console.log("WHY NOT ENTER HERE?");
   },(error:any)=>{
     console.log(error);
   });
}

перед отправкой HTTP-запроса установите Accept и Content-Type вроде следующего:

import { HttpHeaders } from '@angular/common/http';

setHttpHeader() {
  const headers = new HttpHeaders().set('Accept', 'application/json').set('Content-Type', 'application/json');
  let options = { headers: headers };
  return options;
}

getValue(): Observable<string> {
 return this.http.get<string>(this.myURL,this.setHttpHeader());
}
...