Я создал эпопею на основе "выборки пользователей" на сайте, доступном для наблюдения за Redux.
Мне просто интересно, как я могу добавить обработку ошибок в запрос ajax. Моя попытка:
const fetchCategoriesEpic = action$ =>
action$.ofType(FETCH_CATEGORIES)
.mergeMap(() =>
ajax.getJSON(`http://localhost:4000/categories`)
.map(
response => fetchCategoriesFulfilled(response),
error => console.log(error)
)
)
Я тестирую, пока API, который я вызываю, не работает для проверки обработки ошибок. Все еще получаю это в консоли, и приложение вылетает:
ExceptionsManager.js: 71 Необработанное исключение JS: ошибка ajax 0
Если это официальная документация тогда мне избавиться от карты и вместо этого подписаться?
Я изменил это на это:
import 'rxjs/add/operator/catch'
const fetchCategoriesEpic = action$ =>
action$.ofType(FETCH_CATEGORIES)
.mergeMap(() =>
ajax.getJSON(`http://localhost:4000/categories`)
.map(
response => fetchCategoriesFulfilled(response)
).catch( err => console.log(err))
)
Но получил:
Вы предоставили undefined там, где ожидался поток. Вы можете предоставить наблюдаемый, обещанный, массив или итерируемый
изменено на (согласно ответу Джея Фелпса здесь):
const fetchCategoriesEpic = action$ =>
action$.ofType(FETCH_CATEGORIES)
.mergeMap(() =>
ajax.getJSON(`http://localhost:4000/categories`)
.map(response => fetchCategoriesFulfilled(response))
.catch( err => Observable.of(err.xhr.response))
)
есть:
Действия должны быть простыми объектами. Используйте собственное промежуточное ПО для асинхронных действий
Что я делаю не так?