猿问

调度后调用函数?(还原)

我正在使用 Firebase 开发 React 应用程序。我想在dispatch完成后调用第一个函数。每个用户都分配了一个currentcity,但我不希望currentcity被删除,因为这会破坏应用程序。所以我想要做的是在调用 deleteCity 函数之后运行 changeCurrentCity 函数,这样就不会发生这种情况。我只是想将 currentcity 分配给列表中的第一个。


changeCurrentCity()不从内运行.then()的deleteCity。我试过 console.log-ing 它,它只显示功能本身。我确定这只是一个简单的修复,但我不知道我在做什么。


const changeCurrentCity = (city) => {

    return (dispatch, getState, { getFirebase, getFirestore }) => {

        const firestore = getFirestore();

        const userId = getState().firebase.auth.uid;

        firestore.collection('users').doc(userId).update({

            currentcity: city

        }).then(() => {

            dispatch({ type: 'UPDATE_CITY', city });

        }).catch((err) => {

            dispatch({ type: 'UPDATE_CITY_ERROR', err});

        })

    }

};


const deleteCity = (city) => {

    return (dispatch, getState, { getFirebase, getFirestore }) => {

        const firestore = getFirestore();

        firestore.collection('cities').doc(city.id).delete().then(() => {

            dispatch({ type: 'DELETE_CITY', city });

        }).then(() => {

            changeCurrentCity(getState().firestore.data.cities[Object.keys(getState().firestore.data.cities)[0]].userid);

        }).catch((err) => {

            dispatch({ type: 'DELETE_CITY_ERROR', err});

        })

    }

};


export {changeCurrentCity, deleteCity}

问题出在deleteCity. changeCurrentCity删除城市后未运行。


德玛西亚99
浏览 151回答 1
1回答

翻阅古今

分派动作是异步的,这就是为什么可能在分派后立即调用 changeCity 而不更新商店的原因。您可以使用 asnyc 等待调度并在此之后解决承诺。这将延迟 changeCity 直到删除完成。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答