在beforeRouteEnter中调用方法时NProgress与API请求异常问题
问题原因解析
路由钩子执行时机的核心差异
第一个可行写法中,axios请求直接在beforeRouteEnter钩子内执行,并且将触发路由跳转的next()和结束进度条的NProgress.done()放在请求成功的.then()回调中。这就确保了必须等API请求完成后,才会执行路由跳转和结束进度条,完全匹配你的需求。而第二个写法里,你把
vm.index()放在了next(vm => { ... })的回调函数中。需要明确的是:这个回调是路由跳转已经完成、组件实例已经初始化完成之后才会触发的。所以当你调用vm.index()时,路由早就完成跳转了,根本无法通过这个方式阻塞路由。异步操作未被正确等待
vm.index()内部是异步的axios请求,但你调用它之后立刻执行了NProgress.done(),完全没有等待请求完成。这就导致进度条提前结束,和实际的API请求进度完全脱节。
总结来说:你把本该在路由跳转前执行的阻塞式异步操作,放到了路由跳转后才运行的回调里,还没等请求结束就终止了进度条,所以出现了路由提前跳转、进度条提前结束的问题。
内容的提问来源于stack exchange,提问作者SyedKhizer
相关产品推荐
相关产品推荐

