Передача данных из подписчика () в переменную в Angular 6 - PullRequest
0 голосов
/ 05 сентября 2018

В приведенной ниже функции console.log (data) возвращает мою полезную нагрузку, но я получаю «undefined» в console.log (this.finalData). Как лучше хранить подписанные данные в моей переменной this.finalData?

component.ts

getFavorites(){
  this.jobService.getFavoritesFromDB().subscribe((data) =>  { 
   console.log(data)
   this.finalData = data
  });
  console.log(this.finalData)

 }

service.ts

getFavoritesFromDB(){
    return this.http.get("http://localhost:3000/post");
}

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Если вы пытаетесь использовать this.finalData после завершения подписки, посмотрите на событие complete , которое происходит после успешного завершения подписки.

Пример

  getFavorites() {
    this.jobService.getFavoritesFromDB().subscribe((data) => {
      console.log(data)
      this.finalData = data
      },
      error => {
        // handle error calling getFavoritesFromDB()
      },
      () => {
        // Note: If getFavoritesFromDB() has an error, the complete function will not get called

        // The call getFavoritesFromDB() was successful
        // Now you can use this.finalData
        console.log(this.finalData);
      });
  }

Для получения дополнительной информации о Подписаться ( onNext , onCompleted и onError ) см. Официальную документацию ReactiveX: http://reactivex.io/documentation/operators/subscribe.html

0 голосов
/ 05 сентября 2018

проблема в том, что ваш оператор console.log выполняется даже до того, как вы получите ответ (асинхронный).

То, как вы храните данные в переменной, совершенно нормально, вам просто нужно переместить оператор консоли внутри подписки.

Ниже показано, как это выполняется

console.log("going to call method") --- (1)

getFavorites(){ --- (2)
  console.log("executing...") --- (3)
  this.jobService.getFavoritesFromDB().subscribe((data) =>  { 
   console.log("data inside subscribe", data) --- executes when response arrives --- (5)
   this.finalData = data
  });
  console.log("data outside subscribe", this.finalData); --- (4)
  ... and continues   
 }

O / P:

going to call method
executing...
data outside subscribe  // undefined or null (blank)
data inside subscribe "your data"
0 голосов
/ 05 сентября 2018

Вам нужно поместить console.log внутри subscribe, так как ответ от API приходит асинхронно

getFavorites(){
  this.jobService.getFavoritesFromDB().subscribe((data) =>  { 
   console.log(data)
   this.finalData = data;
   console.log(this.finalData)
  });
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...