私は先週、まったく同じ問題に直面しました。 .json
メソッドは、JSON自体ではなく、JSONに約束を返します。あなたが一度に応答し、JSONの両方にアクセスしたい場合は、このように、ネストされたクロージャを使用する必要があります:
fetch(...)
.then(response => {
response.json().then(json => {
// code that can access both here
})
})
をjson
約束に渡されたコールバックがfetch
約束にコールバック内で作成されたので、 response
にもアクセスできます。
JSONとエラーのケースを処理し、すべてのフェッチでそれを再利用する関数を作成することができます。たとえば、次のようなものがあります。
function fetchHandler(response) {
if (response.ok) {
return response.json().then(json => {
// the status was ok and there is a json body
return Promise.resolve({json: json, response: response});
}).catch(err => {
// the status was ok but there is no json body
return Promise.resolve({response: response});
});
} else {
return response.json().catch(err => {
// the status was not ok and there is no json body
throw new Error(response.statusText);
}).then(json => {
// the status was not ok but there is a json body
throw new Error(json.error.message); // example error message returned by a REST API
});
}
}
* return {'response':resp.json()、 'status':resp.status} *に問題があります。 –