I use fetch in react-native to make API calls.
I need to get status code (200 , 401, 404 ) and the response data.
This work to get the response data :
return fetch(url)
.then(response => {
return response.json();
})
.then(res => {
console.log("reponse :", res); // <-------- res is ok with data
}) .catch(error => {
console.error(error);
return { name: "network error", description: "" };
});
Now i tweak the first then to get the status code but data is not what i except
return fetch(url)
.then(response => {
const statusCode = response.status;
const data = response.json();
return { statusCode, data };
})
.then(res => {
console.log("reponse :", res); // <-------- i get a "promise"
}).catch(error => {
console.error(error);
return { name: "network error", description: "" };
});
the console log :
{statusCode: 200, data: Promise}
response.json()
returns a promise, you should wait until it will be fulfilled. To do that you can usePromise.all
with array of two elements:statusCode
andresponse.json()
call://EDIT you can create a function who process the response
and use it the then()
Because the response of the API in the first
then
is a string not an object, you can't use the response likeresponse.status
. You should first convert the response to a JSON object and then use the status asresponse.status
like the first example. The code should work properly: