ボタンを押すと window.fetch()
を使って API にリクエストが投げます。
返ってきた JSON をパースした後、window.alert()
で表示します。
2xx 以外のレスポンスコードが返ったときには明示的に throw Error()
し、
そのときに JSON で返ってくるエラーメッセージを渡すようにしました。
これでエラーの詳細な理由までユーザーに伝える事ができます。
// レスポンスに対して共通で行う前処理
// 4xx系, 5xx系のエラーをさばくハンドラ
var handleErrors = function(response) {
// 4xx系, 5xx系エラーのときには response.ok==false になる
if (!response.ok) {
return response.json().then(function(err) {
throw Error(err.message);
});
} else {
return response;
}
}
var prepare = function(response) {
// ステータスコードとステータステキストを表示
console.info('ok?: ', response.ok);
console.info('status: ', response.status);
console.info('statusText: ', response.statusText);
// レスポンスボディをJSONとしてパース
return response.json();
}
// 正常終了時の処理
var onFulfilled = function(data) {
var message = ([
'成功ハンドラで処理されました。',
'data: ' + JSON.stringify(data, null, ' '),
]).join('\n');
console.log(data);
alert(message);
};
// エラー終了時の処理
var onRejected = function(err) {
var message = ([
'失敗ハンドラで処理されました。',
'error: ' + err.message,
]).join('\n');
console.error(err);
alert(message);
};
fetch('/path/to/api')
.then(handleErrors)
.then(prepare)
.then(onFulfilled)
.catch(onRejected);