Действие выполняется не асинхронно
Использую Vue.js + Vuex.
Имеется мутация
export function run (state, payload) {
...
}
, в которой, к примеру, рекрсивно считывается директория через fs.readdirSync(dir).
Имеется действие
export function run (context, payload) {
return new Promise((resolve, reject) => {
context.commit('run', payload)
resolve()
})
}
В компоненте вызываю действие
this.run({
path: this.path,
symbols: this.symbols
}).then(()=>
console.log('GOOD: ')
).catch((err)=>
console.log('BAD: ')
).finally(()=> {
console.log('FINALLY ')
})
На мой взгляд, после вызова действия this.run должно начаться считывание директории, но при этом работа приложения не должна приостанавливаться.
Как запускать код в мутации, так сказать "в параллельном потоке"?
P.S. Про асинхронный fs.readdir знаю, но данную задачу требуется(хочу) решить именно через синхронные функции.
Ответы (1 шт):
Асинхронность в сочетании с мутацией состояний может сильно усложнить вашу программу. Например, когда вы вызываете два метода, оба с асинхронными обратными вызовами, которые изменяют состояние, как вы узнаете, когда они были вызваны и какой обратный вызов был вызван первым? Именно поэтому мы хотим разделить две концепции. В Vuex мутации - это синхронные транзакции :
Чтобы обрабатывать асинхронные операции, давайте введем Actions .