Je rencontre un problème lors de l'utilisation de l'API native fetch de React. plusieurs fois la demande a échoué. J'ai une connexion haut débit. mais plusieurs fois cela a échoué. ce problème se produit dans Android, ios les deux.
const shoppingApi = 'myserverlink';
async function Sendshoppinapi(data) {
try {
let response = await fetch(shoppingApi, {
method: 'POST',
headers: {
'Accept': 'application/json',
'content-type':'multipart/form-data'
},
body: data
});
let responseJson = await response.json();
return responseJson;
}
catch (error) {
Alert.alert(error.toString())
}
}
export {Sendshoppinapi};
données que j'envoie au serveur en tant que post-demande
add_to_wishlist = (item,index) => {
{
let data = new FormData();
data.append('methodName', 'add_to_wishlist');
data.append('user_id', global.userid)
data.append('item_id', this.props.navigation.state.params.itemid.toString())
Sendshoppinapi(data).then((responseJson)=>{
console.warn(responseJson);
if(responseJson.responseCode == '200'){
this.setState({fav:false})
Alert.alert('SHOPPING','Item added to wishlist successfully.',[{text: 'OK',},],{ cancelable: false })
}
else{
this.setState({fav:false})
Alert.alert('SHOPPING','Item already .',[{text: 'OK',},],{ cancelable: false })
}
})}
}
J'ai cité une réponse que j'ai utilisée pour un autre post - mais j'ai ajouté attendre.
Vous pouvez vérifier l'état de l'appel pour déterminer peut-être pourquoi l'échec de l'appel réseau. Essayez d'utiliser ok
de fetch pour vérifier si la réponse était valide, par exemple:
.then(function(response) {
if (!response.ok) {
//throw error
} else {
//valid response
}
})
Utilisation de attendre:
let response = await fetch(url)
if (response.ok) return await response.json()
Vous pouvez également accéder à l'état de la réponse comme:
response.status;
ou encore, statusText tel que:
response.statusText;
vérifiez ci-dessous:
https://developer.mozilla.org/en-US/docs/Web/API/Response/statusText
https://developer.mozilla.org/en-US/docs/Web/API/Response/status
Utilisez la fonction then () avec des promesses. (Extrait de code demandé)
fetch(shoppingApi, {
method: 'POST',
headers: {
'Accept': 'application/json',
'content-type':'multipart/form-data'
},
body: data
})
.then((resp) => {
return resp.json()
})
.then((resp) => {
//resp contains your json data
});
Vous pouvez également faire en sorte que votre fonction renvoie une promesse et l'utiliser avec then ():
function sendShoppingApi(data) {
return new Promise((resolve, reject) => {
fetch(shoppingApi, {
method: 'POST',
headers: {
'Accept': 'application/json',
'content-type':'multipart/form-data'
},
body: data
})
.then((resp) => {
return resp.json();
})
.then((resp) => {
resolve(resp);
/*
you should also check if data is valid, if something went wrong
you can reject the promise:
if(!dataOK)
reject("error message");
*/
});
});
}
Alors maintenant, vous pouvez faire quelque chose comme ça:
sendShoppingApi(data)
.then((resp) => {
//do stuff with your data
})
.catch((err) => {
//handle error
});
[~ # ~] mise à jour [~ # ~]
pourrait être un doublon de ceci: React Native fetch () Network Request Failed
Dans le cas où vous exécutez l'application sur le Android, l'API est sur un ordinateur et les deux sont sur le même réseau, j'ai ajouté des choses possibles à vérifier. t des solutions spécifiques détaillées car il existe de nombreuses réponses sur chaque sujet.