Angular - Observable.catch не срабатывает, возвращается наблюдаемый - PullRequest
0 голосов
/ 19 сентября 2018

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

У меня естьпростая функция, которая возвращает POST-запрос:

getQuestions() {
   return this.http.post(AppSettings.CI_GET_QUESTIONS, '')

}

Если я подпишусь на это Observable:

this.dataService.getQuestions()
  .map(questions => questions.json())
  .map((questions) => {
    return questions;
  })
  .subscribe((success) => {
    console.log("### sc:", success)
  })

, я получу распечатанный список вопросов, так чтопока все хорошо.

Тем не менее, я пошел проверить, хранятся ли у нас вопросы локально, а если нет, то иди и получи вопросы из облака.Итак, я написал это Observable, чтобы сделать это:

this.storage.checkQuestionsLocally()
  .catch((error) => {
    return this.dataService.getQuestions()
      .map(questions => questions.json())
      .map((questions) => {
        return questions;
      })

  })
  .subscribe((done) => {
    console.log("### questions done:", done)
  }, (error) => {
    console.log("### error during getting questions:", error)
  }, () => {
    console.log("### questions found routine is completed");
  })

При запуске мы проверяем, есть ли у нас что-нибудь сохраненное локально, и если мы получим ошибку, то перейдем к получению вопросов.

Проблема у меня в этой catch функции.Ошибка вызывает catch, и код пытается выполнить запрос, но на самом деле ничего не происходит.На странице «Сеть» (Chrome Dev Tools) я вижу, что мой запрос отменен:

getQuestions (canceled) xhr polyfills.js:3 0 B 15 ms

Почему он отменяется?Разве просьба не должна просто уволить и вернуть вопросы?

Спасибо, Бенгра

...