React native 每次操作中的提取请求失败/抛出错误时,调用changeIsSavedStatus()一次的正确方法是什么?
每次操作中的提取请求失败/抛出错误时,调用changeIsSavedStatus()一次的正确方法是什么React native 每次操作中的提取请求失败/抛出错误时,调用changeIsSavedStatus()一次的正确方法是什么?,react-native,redux,fetch,dispatch,React Native,Redux,Fetch,Dispatch,每次操作中的提取请求失败/抛出错误时,调用changeIsSavedStatus()一次的正确方法是什么 removeSavedDeals = () => { this.changeIsSavedStatus(); //This Statement makes a fetch request and sets removeSelectedSavedDeals_ErrorStatus to true if error occurs this.props.remove
removeSavedDeals = () => {
this.changeIsSavedStatus();
//This Statement makes a fetch request and sets removeSelectedSavedDeals_ErrorStatus to true if error occurs
this.props.removeSelectedSavedDeals([this.props.navigation.getParam("dealDetails")._id], this.props.savedDealsListDataSource);
//This changeIsSavedStatus() statement does not gets executed as this.props.removeSelectedSavedDeals_ErrorStatus is still false when the if statement is executed.
if(this.props.removeSelectedSavedDeals_ErrorStatus){
changeIsSavedStatus();
}
}
changeIsSavedStatus=()=>{
this.setState({
isSaved:!this.state.isSaved
})
}
RemoveSelectedSavedDels操作
export const removeSelectedSavedDeals = (dealIdToUnSave, dataSource) => dispatch => {
const toDelete = new Set(dealIdToUnSave);
const newDataSource = dataSource.filter(item => !toDelete.has(item._id));
//Send request to Backend to delete dealIdToUnSave from db
let url = sett.host+`/users/removeSavedDeals`;
return fetch(url, {
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
dealIdToUnSave: dealIdToUnSave,
savedDealsListDataSource: newDataSource
}),
})
.then((res) => {
if (!res.ok) {
console.log("Fake Error");
throw Error(res.statusText);
}
return res;
})
.then(res => {
dispatch({
type: "removeSelectedSavedDeals_Success",
newDataSource
})
})
.catch(err => {
//TODO: Handle Error Properly
console.log("Error Encountered While Unsaving Deals: "+ err);
dispatch({
type: "removeSelectedSavedDeals_Error",
err
})
});
}
另请注意,如果有任何方法可以改进我的RemoveSavedDels()如果
props.RemoveSelectedSavedDels
调用fetch,它还应该返回一个承诺。然后,您可以运行您的changeIsSavedStatus
,以捕获承诺
removeSavedDeals = () => {
this.changeIsSavedStatus();
//This Statement makes a fetch request and sets removeSelectedSavedDeals_ErrorStatus to true if error occurs
this.props.removeSelectedSavedDeals(...)
.then(() => {...})
.catch(err => {
this.changeIsSavedStatus();
});
}
谢谢,杰里米。这确实有帮助。但我还有一个问题。执行fetch请求中的.catch语句时,不会执行this.props.removeselectedSavedDels(…)中的.catch语句。然后().catch()不会执行。而是。然后执行此语句的一部分。我已更新代码以包含我的RemoveSelectedSavedDels操作。感谢您可以从
removeSelectedSavedDeals
调用中删除捕获,在这种情况下,它将由上面的调用函数处理。