Как вернуться в качестве наблюдателя из 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()