私は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('/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);
たくさん。私たちのためにこれをすべて行うユーティリティ関数/クラスが必要です。このように動作し何か:
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
S/catch
ES後を連鎖しなければならないということです。
whatwg-fetch/ES6 Promisesを使用してこれを達成する方法に関するヒントを教えてください。
関連:
あり同様の記事がありますが、それらはすべて、デフォルト以外のthen
sおよびcatch
ES後を実行し、デフォルトのキャッチの必要性に対処していないようです:
- How to create a Promise with default catch and then handlers
- Default behavior if no other functions chained to a promise
編集10月14日:
可能な重複:
export function genericFetch(url, promise, optionOverrides) {
const fetchOptions = {...fetchDefaults, ...optionOverrides};
return fetch(url, fetchOptions)
.then(fetchMiddleware)
.then(promise)
.catch(function(error) {
showGenericFlashMessage();
});
}
特殊なエラーを必要としないユースケース:Promises and generic .catch() statements
関数が返った後にユーザーが '.then/.catch'esを追加したとしても、自動的に' .catch'リスナーを追加したいということを正しく理解していますか? AFAIKはできません。 – nils
いいえ、キャッチされていないエラーを処理するデフォルトの約束 'catch'を追加します。エラーが適用可能であれば、' catch'ハンドラが別途定義されていない場合です。 –