Я создаю приложение React + Redux и сейчас работаю над функцией, которая выбирает определенное количество закладок пользователя на страницу.
Это выглядит так: когда пользователь делает закладку на ресурс, идентификатор ресурса сохраняется в базе данных и связывается с пользователем.Поэтому функция, над которой я работаю, выбирает идентификаторы закладок пользователя и делает запросы API, чтобы получить дополнительную информацию о каждом ресурсе и отобразить их пользователю в списке.Все запросы API заключены в Promise.all()
Моя проблема в том, что если ресурс, добавленный пользователем в закладки, был удален, запрос API, очевидно, приводит к ошибке 404, что приводит к ошибке Promise.all()
,хотя остальные запросы успешны.Итак, как я могу игнорировать ошибку из этого единственного неудачного запроса и продолжать работать с успешными?
Вот моя функция:
export const fetchUserBookmarks = ( bookmarkType, reset ) => async ( dispatch, getState, api ) => {
if( reset ) {
dispatch({
type: 'RESET_BOOKMARKS'
});
}
var endpoint;
if( bookmarkType == 'projects' ) {
endpoint = 'posts';
} else if( bookmarkType == 'images' ) {
endpoint = 'media';
} else {
endpoint = bookmarkType;
}
const bookmarksIDs = getState().currentUser.bookmarks.IDs[ bookmarkType ];
const bookmarksPerPage = getState().currentUser.bookmarks.perPage;
const start = bookmarksPerPage * getState().currentUser.bookmarks[ bookmarkType ].resultsPage;
const end = start + bookmarksPerPage;
const bookmarksSet = bookmarksIDs.slice( start, end );
const BOOKMARKTYPE = bookmarkType.toUpperCase();
dispatch({
type: 'IS_FETCHING_BOOKMARKED_' + BOOKMARKTYPE,
});
try {
const bookmarks = [];
const getBookmarks = await Promise.all(
bookmarksSet.map( bookmarkID =>
api.get( '/wp-json/wp/v2/' + endpoint + '/' + bookmarkID )
)
);
getBookmarks.map( request => {
bookmarks.push( request.data )
});
dispatch({
type: 'HAS_FETCHED_BOOKMARKED_' + BOOKMARKTYPE,
payload: bookmarks
});
} catch( error ) {
if( error.response !== undefined && error.response.status == 401 ) {
dispatch({
type: 'IS_EMPTY_BOOKMARKED_' + BOOKMARKTYPE
});
} else {
dispatch({
type: 'FAILED_FETCHING_BOOKMARKED_' + BOOKMARKTYPE
});
}
}
}