Прямо сейчас я сталкиваюсь со странной проблемой. В моем проекте vue есть магазин vuex, который разделен на разные модули. Я хочу использовать Promise.all()
для одновременного выполнения двух независимых асин c действий vuex, чтобы воспользоваться преимуществом поведения первый сбой .
store / modules / category:
async CATEGORIES({ rootState }) {
const response = await axios.post('link_to_api', {
// some arguments for the api
arg: rootState.args
})
return response
}
магазин / модули / транспорт:
async TRANSPORTATION({ rootState }) {
const response = await axios.post('link_to_api', {
// some arguments for the api
arg: rootState.args
})
return response
}
Я знаю, что хочу вызвать эти асин c функции в Promise.all
:
магазин / модули / категории:
async PUT_CATEGORIES({ commit, dispatch, rootState }) {
try {
const [resCategories, resTransportation] = await Promise.all([
dispatch('CATEGORIES').catch(err => { console.log('Fehler bei Kabinenabfrage!'); throw {error: err, origin: 'kabine'}; }),
dispatch('transportation/TRANSPORTATION', {root:true}).catch(err => { console.log('Fehler bei Flugabfrage!'); throw {error: err, origin: 'flug'}; })
])
//do something after both promises resolved
} catch(error) {
// do something if one promise rejected
commit('errorlog/ERROR', 4, {root:true})
dispatch("errorlog/LOG_ERROR", {'origin': '2', 'error_code': '113', 'message': error.toString()}, {root:true})
router.push({path: '/Error'})
}
Я получаю следующую ошибку:
Это странно, потому что я использовал {root:true}
и префикс transport в диспетчере для доступа к действию транспортного модуля в хранилище. Это прекрасно работает для действия LOG_ERROR в модуле errorlog , который я использую в блоке catch.
Если я скопирую действие ТРАНСПОРТИРОВКА в модуле категорий, это прекрасно работает ...
Кто-нибудь сталкивался с этой проблемой раньше и есть совет ??
Заранее спасибо!