Angular 5+ не может сохранить результат в форме наблюдаемого ответа - PullRequest
0 голосов
/ 18 мая 2018

У меня есть приложение Angular, которое потребляет данные из веб-интерфейса.Когда я делаю запрос, я получаю набираемый наблюдаемый.

Теперь, когда я делаю это:

data: Product[];
productService.getByProductId("061000957").subscribe(res => {
      console.log(res);
      this.data = res;
});
console.log(this.data);

то, что я вижу в консоли, я вижу это

console screenshot

Я ясно вижу, что в результате получился продукт, который мне нужен.Но почему я не могу сохранить это в моей локальной переменной данных?

Спасибо

Ответы [ 4 ]

0 голосов
/ 18 мая 2018

Вы можете сделать это примерно так, наконец, здесь будет выполняться после завершения getProductId

productService.getByProductId("061000957")
      .finally(() => console.log(this.data))
      .subscribe(res => {
           console.log(res);
           this.data = res; 
    });

Я использую do и, наконец, , когда я пытаюсь отладить rxjs наблюдаемый

0 голосов
/ 18 мая 2018

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

   data: Product[];
productService.getByProductId("061000957").subscribe(res => {
       console.log(res);
       this.data = res;
       console.log(this.data);
    });
0 голосов
/ 18 мая 2018

Вы должны сохранить данные в подписке HTTP Observable:

productService.getByProductId("061000957").subscribe(res => {
   this.data = res;
   console.log(this.data)   //you can see
})
0 голосов
/ 18 мая 2018

Наблюдаемый является асинхронным, как и обещание.Таким образом, console.log(this.data); выполняется до того, как ответ будет возвращен.Попробуйте.

data: Product[];
productService.getByProductId("061000957").subscribe(res => {
       console.log(res);
       this.data = res;
       console.log(this.data);
    });

Теперь вы печатаете данные после того, как они были установлены.

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