Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React native 每次操作中的提取请求失败/抛出错误时,调用changeIsSavedStatus()一次的正确方法是什么?_React Native_Redux_Fetch_Dispatch - Fatal编程技术网

React native 每次操作中的提取请求失败/抛出错误时,调用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

每次操作中的提取请求失败/抛出错误时,调用changeIsSavedStatus()一次的正确方法是什么

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
调用中删除捕获,在这种情况下,它将由上面的调用函数处理。