Vuex action: лучший способ разрешить вложенные обещания - PullRequest
0 голосов
/ 05 февраля 2020

Я новичок в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...