Вы можете реализовать элементарную функцию «паузы» на маршрутизаторе следующим образом (код не проверен):
// Router is initially not paused
let pausedResolve = null
let pausedPromise = Promise.resolve()
router.beforeEach(async (to, from, next) => {
await pausedPromise
next()
})
function pause() {
if (!pausedResolve) {
pausedPromise = new Promise(resolve => pausedResolve = resolve)
}
}
function resume() {
if (pausedResolve) {
pausedResolve()
pausedResolve = null
}
}
После создания маршрутизатора немедленно вызовите pause()
, а затем войдя в систему, вызовите resume()
(возможно, вы можете сделать это в своем коде Vuex).
Преимущество этой реализации состоит в том, что код маршрутизатора не зависит от кода Vuex (как правило, рекомендуется по возможности поддерживать слабосвязанный код, когда это возможно).).