как ждать асинхронных данных, поступающих из подписки - PullRequest
0 голосов
/ 09 сентября 2018

Поэтому я пытаюсь дождаться подписки на данные, поступающие из локального хранилища, но данные, которые я получаю из локального хранилища, иногда запаздывают, и .Uid не определен

constructor(private route: ActivatedRoute,
            private cp: CommerceProvider,
            protected localStorage: LocalStorage) {
  this.localStorage.getItem('castra').subscribe((data) => {
    this.uid = data.uid;
    console.log(data);
    this.getCastraProfile();

  })
}

ngOnInit() {
  let id = parseInt(this.route.snapshot.paramMap.get('id'));
  this.castra_id = id;
  this.localStorage.getItem('cart').subscribe((cart) => {
    if(cart.length == 0){      
      this.localStorage.setItem('castra', { 'uid': this.castra_id 
 }).subscribe(() => {});
    } 
  }, (error)=> {
    this.localStorage.setItem('cart', []).subscribe(() => {});
 });
}

Итак, как ждать поступления этих данных, а затем назначать их переменной uid?

1 Ответ

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

Вы не можете дождаться способа подписки.Если вы также используете метод ожидания, чем при первой загрузке страницы, вызывается подписка, и вы всегда получаете нулевое значение, пока ваш API не вызывается.

Если этот идентификатор у вас равен undefined, используйте if(data) внутри подписаться.

Пример в вашем случае:

this.localStorage.getItem('castra').subscribe((data) => {
   if(data){    
   // This will call if they have some data. It call if data have 'null' or 'Undefined' value.
        this.uid = data.uid;
        console.log(data);
        this.getCastraProfile();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...