【问题标题】:How to catch error seperate for two await within one try catch如何在一次尝试中捕获两个等待的错误
【发布时间】:2020-07-28 05:15:07
【问题描述】:

我有一个函数,在 Redux 操作的一个 try catch 块中运行两个等待承诺。我只是发现添加新项目的错误。 如果我想捕获参与者添加的错误,我该怎么办? 添加参与者功能仅在创建新项目时运行,并且一旦成功,参与者可以获得新创建的项目ID,这就是我将这两个 await 放在一起的原因。

const handleProjectParticipant = async (project, participant) => async (dispatch) => {
    try {
        const resultProject = await createNewProject(project)
        dispatch({ type: PROJECT_ADD, payload: resultProject })
        const newProject_id = resultProject.id
        participant.project_id = newProject_id
        const resultParticipant = await addParticipant(participant)
        dispatch({ type: PARTICIPANT_ADD, payload: resultParticipant })
    }
    catch(e) {
        dispatch({ type: PROJECT_ADD_FAIL, payload: e})
        //want to catch error for add participant
        //dispatch({ type: PARTICIPANT_ADD_FAIL, payload: e})
    }
}

【问题讨论】:

    标签: javascript async-await react-redux try-catch


    【解决方案1】:

    你可以在第一个嵌套另一个 try/catch:

    const handleProjectParticipant = async (project, participant) => async (dispatch) => {
        try {
            const resultProject = await createNewProject(project)
            dispatch({ type: PROJECT_ADD, payload: resultProject })
            const newProject_id = resultProject.id
            participant.project_id = newProject_id
            try {
                const resultParticipant = await addParticipant(participant)
                dispatch({ type: PARTICIPANT_ADD, payload: resultParticipant })
            } catch(e) {
                dispatch({ type: PARTICIPANT_ADD_FAIL, payload: e})
            }
        }
        catch(e) {
            dispatch({ type: PROJECT_ADD_FAIL, payload: e})
        }
    }
    

    或者你可以这样做:

    const handleProjectParticipant = async (project, participant) => async (dispatch) => {
        let handleError = (e) => dispatch({ type: PROJECT_ADD_FAIL, payload: e})
        try {
            const resultProject = await createNewProject(project)
            dispatch({ type: PROJECT_ADD, payload: resultProject })
            const newProject_id = resultProject.id
            participant.project_id = newProject_id
            handleError = (e) => dispatch({ type: PARTICIPANT_ADD_FAIL, payload: e})
            const resultParticipant = await addParticipant(participant)
            dispatch({ type: PARTICIPANT_ADD, payload: resultParticipant })
        }
        catch(e) {
            handleError(e)
        }
    }
    

    【讨论】:

    • 没有巢的任何方式?
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2018-04-01
    • 2021-06-10
    • 2021-05-05
    • 2020-05-31
    • 2021-10-12
    相关资源
    最近更新 更多