Аксиос попал внутрь. Потом не работает как положено - PullRequest
2 голосов
/ 27 апреля 2019

Я использую axios, чтобы сделать http-запрос.Внутри .then () я использую другой вызов axios.Наконец, у меня есть третья функция then (), которая должна запускаться после второй, но на самом деле это не так.второй тогда закончен.Как я могу сделать последний, затем запустить только после того, как второй запрос Axios будет завершен?

1 Ответ

4 голосов
/ 27 апреля 2019

Вы можете использовать Promise.all для возврата ответа на следующий блок .then, и он будет вызван после того, как все обещания будут разрешены во втором .then

let assets = [];

export const initAssets = () => {
    return dispatch => {
        dispatch(setLoadingToTrue());
        axios.get('https://....json')
            .then(response => {
                for(let key in response.data) {
                    assets.push(response.data[key]);
                }
            })
            .then(() => {
                const token = '...';
                const promises = [];
                assets.forEach((cur) => {
                    promises.push(axios.get('...' + cur.ticker + '/quote?token=' + token)
                    .then(response => {
                        console.log(response);
                        cur.price = response.data.latestPrice;
                    }))                   
                }) 
                return Promise.all(promises);               
            })
            .then(() => {
                dispatch(initAllAssets(assets));
                dispatch(setLoadingToFalse());
            })
            .catch(error => {
                console.log(error);
                dispatch(setLoadingToFalse());
            })
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...