使用React Native Fetch API时遇到问题。很多次请求失败。我有高速连接。但是很多次失败了。 这个问题在android和ios中都在发生。
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};
我作为发件人请求发送服务器的数据
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 })
}
})}
}
答案 0 :(得分:2)
我引用了我在另一篇文章中使用的答案-但是我添加了等待。
您可以检查呼叫状态,以确定也许网络呼叫失败的原因。尝试使用提取的ok
检查响应是否有效,例如:
.then(function(response) {
if (!response.ok) {
//throw error
} else {
//valid response
}
})
使用等待:
let response = await fetch(url)
if (response.ok) return await response.json()
您还可以访问响应的状态,例如:
response.status;
或statusText,例如:
response.statusText;
签出以下内容:
https://developer.mozilla.org/en-US/docs/Web/API/Response/statusText
https://developer.mozilla.org/en-US/docs/Web/API/Response/status
答案 1 :(得分:1)
将then()函数与promises一起使用。 (请求的代码段)
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
});
您还可以使函数返回Promise,并将其与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");
*/
});
});
}
现在您可以执行以下操作:
sendShoppingApi(data)
.then((resp) => {
//do stuff with your data
})
.catch((err) => {
//handle error
});
更新
答案 2 :(得分:0)
对于在Android设备上运行该应用程序的情况,该API位于计算机上,并且它们都位于同一网络上,因此我添加了一些可能要检查的内容。由于每个主题都有很多答案,因此我没有详细的具体解决方案。