Ваш последний блок кода не работал, потому что await
должен быть внутри функции async
.
Помните, ключевое слово await допустимо только внутри асинхронных функций.Если вы используете его вне тела асинхронной функции, вы получите SyntaxError.
От MDN .
Вы можете использовать Регистрация динамического модуля:
accountModulePromise.then(async () => {
let otherModule = await import('@/store/modules/other/other');
store.registerModule('other', otherModule.default);
});
Но когда вы хотите получить действия состояния или отправки, вы должны проверить, зарегистрирован ли модуль, что довольно плохо.
По моему мнению, было бы лучше, еслиВы изменяете структуру модуля так, чтобы отделить друг друга.Попробуйте переместить инициализирующий код в main.js
или App.vue
, затем отправьте действия для обновления состояний модуля из этого.
Обновления
Из вашего последнего обновленияЕще одна идея развязать ваш магазин, я думаю, вы должны хранить ваш list
без заказа и сортировать его только при использовании.Вы можете сделать это с помощью:
Вычисляемое свойство:
...
computed: {
list () {
let list = this.$store.state.other.list
let order = this.$store.state.account.settings.listOrder
if (!list || !order) return []
return someSort(list, order)
}
},
beforeCreate () {
this.$store.dispatch('other/fetchList')
this.$store.dispatch('account/fetchListOrder')
}
...
Или получатели Vuex:
...
getters: {
list: (state) => (order) => {
return someSort(state.list, order)
}
}
...
...
computed: {
list () {
let order = this.$store.state.account.settings.listOrder
return this.$store.getters['others/list'](order)
}
}
...