Я новичок в JavaScript, vue. js и vuex.
Я пытаюсь сохранить список URL-адресов активов изображения в массиве состояний vuex. Ресурсы находятся в ведре s3, и я использую среду усиления для доступа к нему.
Насколько я знаю, я должен сначала перечислить активы, чтобы получить доступные ключи. Storage.list('assets/')
, а затем мне нужно позвонить Storage.get()
, чтобы вернуть URL. Оба эти вызова возвращают обещания.
Мой текущий модуль vuex выглядит следующим образом.
state: {
imageAssets: []
},
getters:{
collection: state => state.imageAssets,
// assetByKey: state => key => {
// }
},
mutations: {
setImageAssets: (state, imageAssets) => {
Vue.set(state, 'imageAssets', imageAssets);
},
addImageAsset: (state, imageUrl) => {
state.imageAssets.push(imageUrl);
}
},
actions: {
listAssetsS3 : (context) => {
return new Promise((resolve, reject) => {
Storage.list('assets/')
.then(result => {
result.filter(el => /.*\.png/g.test(el.key))
.forEach(el => {
Storage.get(el.key).then(res =>
{
context.commit('addImageAsset', res);
resolve(res)
})
})
},
error => {
logger.debug('ERROR', error)
reject(error);
})
})
},
Это работает, но мне интересно, правильно ли это делать. Я знаю, что действие должно вернуть обещание. Но я немного запутался в правильности моих команд разрешения в этом случае, а также хотел бы знать, оптимально ли мое решение и соответствует ли оно парадигме приложения vue / vuex?
Любые советы, исправления или общие советы крайне приветствуются.
Большое спасибо, M