Невозможно оценить данные ответа http post за пределами .subscribe - PullRequest
0 голосов
/ 16 октября 2019

Я использую http-запрос для получения URL-адреса с сервера, и он возвращает правильные данные в качестве ответа. после того, как я установил данные в переменную, я не могу получить доступ к данным переменной из другого метода.

это мой код

public  urlcheck:any;

constructor(public http: Http) {

   //what i want to do is something like this, it works when i do like this.
   //urlcheck = "http://10.0.2.2/mysite/";


   this.urlcheck = this.http.get('http://localhost/website/index.php/Admin/getpublicip');
   this.urlcheck.subscribe(data => {
      //console output is  ('my data: http://10.0.2.2/mysite')
      console.log('my data: ', data["_body"]);
      this.urlcheck = data["_body"];

   })
//console output is ("check url[object Object]")
console.log("check url"+this.urlcheck);
}

Что я здесь не так делаю?

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Я думаю, ты смешиваешь две вещи. Ваш getUrl возвращает обещание, а не строку, поэтому вы должны быть в состоянии сделать это.

this.getUrl().then((url: string) => { this.baseurl = url; }

Или .. вы можете установить baseurl из вашего http-запроса, так как вы подписываетесь на результат, поэтому в действительности нет необходимостивернуть обещание.

subscribe((data: any) => { this.baseurl = data.data; }

Пример кода:

    geturl(){
     return new Promise(resolve => {
         this.http.get('http://localhost/mechmarcl_website/index.php/Admin/getpublicip')
             .map(res => res.json())
             .subscribe((data: any) => {

                 // you receive the data here, so you can use the data here
                 // For example:
                 this.baseurl = data.data;

                 // what you tried to do here I think with this line?
                 this.url= JSON.stringify(data.data);

                 resolve ((data.data));
             }, error => {
             resolve(error);
             });
     });
   }

Или способ обещания.

constructor(public http: Http) {
     this.geturl().then((url: string) => {
        this.baseurl = url;
     }, (err: any) => {
       // handle your promise rejection here
     }
    });
   }
0 голосов
/ 17 октября 2019

Вы можете использовать следующее: this.geturl().then(url => this.baseurl = url.toString());

Или вы можете пойти с:

let baseurl = await this.geturl();
this.baseurl = baseurl.toString();

Но я думаю, что первый сделает всю работу. @ Код Антона Мицева тоже выглядит многообещающе.

0 голосов
/ 16 октября 2019

Вам нужно использовать then() для разрешения обещания:

this.geturl().then(url => this.baseurl = url);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...