Как вернуться в качестве наблюдателя из localStorage или другого наблюдателя в Angular2?

Вот моя функция get() сервиса loantype:

get() {
  return new Observable(observer => {
    let response;
    if ( localStorage.getItem('loantypes_are_valid') === '1' ) {
      response = JSON.parse(localStorage.getItem('loantypes') || '[]');
    } else {
      response = this.getAll().subscribe(result => {
        localStorage.setItem('loantypes', JSON.stringify(result) );
        localStorage.setItem('loantypes_are_valid', '1');
      });
    }
    return response;
  });
}

Я просто хочу использовать этот сервис примерно так:

this.loanTypes.get().subscribe(
  response => this.loantypes = response,
  (error: AppError) => {throw error; }
);

Теперь цель состоит в том, чтобы обслуживать данные из localStorage, если они действительны, в противном случае мне нужно перезагрузить их с сервера API, сохранить их в localStorage (для следующих запросов) и передать данные в компонент.

Этот код сохраняет данные в localStorage, и после этого происходит что-то не так, и я не могу понять, что не так. Любая идея?

1 ответ

Решение

Попробуйте добавить заявление о возврате под подпиской

localStorage.setItem('loantypes', JSON.stringify(result) );
localStorage.setItem('loantypes_are_valid', '1');
return result

Позвоните Наблюдателю дальше ()

 if () {
   observer.next(JSON.parse(...))
 }
 else {
    response = this.getAll().subscribe(result => {
       localStorage.setItem('loantypes', JSON.stringify(result) );
       localStorage.setItem('loantypes_are_valid', '1');
       observer.next(result) 
    });
 }
observer.complete()
Другие вопросы по тегам