Итак, вчера я разрабатывал какую-то автономную функциональность. Поэтому я добавил ApiService, который возвращает Observables. В настоящее время я получаю свой access_token для jwt-Authentication, а затем использую этот токен для генерации заголовков для моего API-запроса. После успешного запроса я сохраняю результат в своем хранилище. Это отлично работает. Теперь вот проблема, которую я хочу проверить на неудачный запрос (например, серверы не работают, приложение отключено), а затем вернуть сохраненный результат из хранилища. Но я не могу заставить его работать.
Вот мой код:
getJobs(): Observable<any> {
this.auth.checkToken()
return from(this.storage.get(ACCESS_TOKEN)).pipe(
switchMap(token => {
let options = this.auth.addToken(token)
return this.http.get(API_URL + "jobs", options)
}),
map(res => {
if (res) {
this.storage.set(JOBS, res)
return res
} else {
return from(this.storage.get(JOBS))
}
}),
catchError(() => {
return from(this.storage.get(JOBS))
})
)
}
Дальнейшие исследования показали, что после отключения сервера или приложения ни map (), ни Функции catchError () были выполнены.
ОБНОВЛЕНИЕ: Решение, предоставленное DJ House, является правильным. Мой код прекрасно работает в моем браузере, но если я создаю свое приложение с ionic cordova build android
, оно застревает после this.http.get(...)
Так что это ясно и проблема с cordova
РЕШЕНИЕ: Ух ты! Произошло что-то волшебное! Я обнаружил, что метод catchError вызывается НО почти через 2 минуты, что очень медленно ... Итак, я реализую время ожидания.
Спасибо flixoflax