在NextJS中是否需要await Router.push方法?
NextJS Router.push() 无await调用的正确性及优化方案
核心结论
不加await调用Router.push()本身是合法的,页面确实能正常触发导航跳转,但这不符合你“不希望执行该语句之后的代码”的需求。
具体分析
无await的运行逻辑
Router.push()是异步方法,返回Promise。不加await时,浏览器会触发导航操作,但当前函数里Router.push()之后的代码会继续执行——因为JavaScript不会等待这个异步操作完成,就会往下走。这就违背了你“跳转后不执行后续代码”的初衷。满足需求的正确写法
- 如果你不需要处理跳转失败的情况,只是想触发跳转后立刻停止后续代码,可以在调用后直接加
return:Router.push('/some-page'); return; - 更严谨的方式是搭配
await和return,这样能确保导航完成(或失败)后再控制后续逻辑,同时可以捕获跳转失败的异常:try { await Router.push('/some-page'); return; // 跳转成功后停止后续代码 } catch (err) { console.error('导航失败:', err); // 这里可以添加失败后的处理逻辑,比如提示用户 }
补充说明
Router.push()的Promise在导航成功时resolve,失败时reject(比如路由不存在、导航被拦截)。不加await的话,失败的异常会被静默忽略,不利于排查问题。如果你的场景需要确保跳转成功,建议使用带await的写法。
内容的提问来源于stack exchange,提问作者Mike M
相关产品推荐
相关产品推荐

