SuperPosan
@SuperPosan
Бандит

Как выполнить массив промисов в redux?

export function homePageProfileAction(list, name) {
    return (dispatch) => {
        dispatch(homePageProfileFetchId(list, name));

        let promise = list.map(v => {
            console.log(getUserHome(v));
            return getUserHome(v).then(id => {
                dispatch(homePageProfileFetchSuccess(id, v));
            });
        });

        // Promise.all([promise])
        //     .then((res) => {
        //         console.log(res);
        //         dispatch(homePageProfileFetchSuccess(res, "top"));
        //     })
        //     .catch(err => {console.log(err); });
    };
}


Есть вот такая функция. Я получаю массив с id. Выполняю запрос к базе (это и есть промис)
Но хотелось бы что бы все выполнилось одновременно и задиспачить один успех, вместо 4х
Promise.all я попробовал, но там что то зацикливается. Не могу понять что
  • Вопрос задан
  • 432 просмотра
Решения вопроса 1
nd0ut
@nd0ut
export function homePageProfileAction(list, name) {
    return (dispatch) => {
        dispatch(homePageProfileFetchId(list, name));

        const promises = list.map(v => getUserHome(v));

        Promise.all(promises)
            .then((res) => {
                dispatch(homePageProfileFetchSuccess(res, "top"));
            })
            .catch(err => {console.log(err); });
    };
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Promise.all вернет массив ответов всех выполненных запросов. Смотри, что в then каждого запроса возвращаешь и как потом обрабатываешь.
export function homePageProfileAction(list, name) {
    return (dispatch) => {
        dispatch(homePageProfileFetchId(list, name));

        let promise = list.map(v => {
            return getUserHome(v);
        });

        Promise.all(promise)
             .then((ids) => {
                 console.log(ids);
                 //dispatch(homePageProfileFetchSuccess(res, "top"));
             })
             .catch(err => {console.log(err); });
    };
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы