提问者:小点点

React中promise内部的防止默认


我是全堆栈开发的新手,我正在寻找一些关于如何处理从承诺返回的错误的指针。

基本上,我将游戏ID存储在MongoDB集合中。当用户输入游戏ID时,我想检查该游戏ID是否存在于集合中。如果没有,我不想把用户链接到一个新的页面。如果是这样,用户应该转到一个新页面。

目前,我的代码没有防止默认,用户仍然转到“waitpage”,即使我使用event.preventdefault。我想知道如何才能阻止用户转到此页面。

这是我现在在前端的代码。

const onJoinGame = (event) => {
    event.persist()
    axios.get(`${BACKENDLINK}/rooms/${gameId}/room_available`)
        .then((res) => {
            if(res.data.Status == true){
                axios.put(`${BACKENDLINK}/rooms/${gameId}/add_user`,
                 {
                    username: username
                 })
            }
        })
        .catch((error) => {
            event.preventDefault()
            setErrorGameId("That game doesn't exist!")
        })
}

并且在return语句中,我像这样使用这个函数。

<Link to={`/${gameId}/waitpage`} onClick={(event) => onJoinGame(event)}>
    <button className = "submit" id="joinGame">Join Game</button>
</Link>

在后端,这是我的get函数返回的内容。

const roomAvailable = (req, res) => {
Room.findOne({roomId: req.params.id}, (err, result) =>{
    if(!result){
        res.status(400).json('Error: ' + err) 
    }
    else{
        
        res.json({'Status': true})
    }
})
}

任何帮助都将不胜感激!


共1个答案

匿名用户

您不能阻止事件的承诺,您将需要在事件处理程序中同步地这样做。

如果您确实需要导航到另一个页面,则必须手动使用正在使用的路由器包的命令式API(它提供link)。