Я работаю над приложением, которое использует what-wg для извлечения по всему месту. Мы определены по умолчанию выборки ЕГО и опционам так:Определить запасной улов для цепочки обещаний?
export function fetchMiddleware(response) {
return new Promise(resolve => {
resolve(checkStatus(response));
}).then(parseJSON);
}
export const fetchDefaults = {
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
};
Мы используем по умолчанию промежуточного программного обеспечения/Fetch опционов так:
fetch('/api/specific/route', fetchDefaults)
.then(fetchMiddleware)
.then(function(data) {
// ... Dispatch case-specific fetch outcome
dispatch(specificRouteResponseReceived(data));
});
Мы хотим, чтобы добавить общий, резервный улов всех fetch
Обычаи по всему приложению, другими словами, что-то вроде этого:
export function fetchGenericCatch(function(error) {
showGenericErrorFlashMessage();
})
fetch('/en/api/user/me/preferences', fetchDefaults)
.then(fetchMiddleware)
.then(function(data) {
dispatch(userPreferencesReceived(data));
})
.catch(fetchGenericCatch);
много дублирования кода. Нам нужна функция/класс utility, которая может сделать все это для нас, например. то, что будет работать так:
genericFetch('/api/specific/route') // bakes in fetchDefaults and fetchMiddleware and fetchGenericCatch
.then(function(data) {
dispatch(userPreferencesReceived(data));
}); // gets generic failure handler for free
genericFetch('/api/specific/route') // bakes in fetchDefaults and fetchMiddleware and fetchGenericCatch
.then(function(data) {
dispatch(userPreferencesReceived(data));
})
.catch(function(error) {
// ...
}); // short-circuits generic error handler with case-specific error handler
Основной нюанс в том, что общий catch
должен быть прикован после в случае конкретных then
с/catch
эс.
Любые советы о том, как это может быть достигнуто с помощью whatwg-fetch/ES6 Promises?
Связанные:
Есть аналогичные должности, но они, кажется, не рассмотреть вопрос о необходимости улова по умолчанию, который работает после всех нестандартных then
с и catch
ов:
- How to create a Promise with default catch and then handlers
- Default behavior if no other functions chained to a promise
Редактировать 14 октября:
Возможный дубликат: Promises and generic .catch() statements
Правильно ли я понимаю вас, что вы хотите добавить прослушиватель '.catch' автоматически, даже если пользователь добавил' .then/.catch'es после того, как ваша функция вернулась? Это невозможно AFAIK. – nils
Нет, я хочу добавить обещание по умолчанию 'catch', которое будет обрабатывать любые неперехваченные ошибки --- если ошибка применима --- если обработчик' catch' не был определен иначе. –