2016-11-30 3 views
0

Я ищу и ищу решение на Stackoverflow и Github, но 1.5 дня недостаточно - я не вижу, где я делаю ошибку. У меня есть код моего компонента, где я хотел бы получать данные из двух конечных точек и после обновлений магазина я консолью что-то записывать.Результат Promise.all перед действиями

class ExampleComponent extends Component { 
    componentDidMount(){ 
    this.fetchData() 
    } 

    fetchData(){ 
    const {dispatch} = this.props 
    Promise.all([ 
     dispatch(getTodos()), 
     dispatch(getPhotos()) 
    ]) 
    .then(() => { 
     console.log('I did everything!'); 
    }); 

    } 
    render() { 
    return (
     <h1>Something</h1> 
    ); 
    } 
} 

export default connect()(ExampleComponent) 

А вот мои действия ...

export function getPhotos() { 
    return function(dispatch) { 
     axios.get('https://jsonplaceholder.typicode.com/photos') 
     .then((response) => { 
     console.log('photos') 
     dispatch({type: 'PHOTOS_REQUEST_SUCCESS',payload: response}) 
     }) 
     .catch((err) => { 
     dispatch(photosRequestError(err)) 
     }) 
    } 
} 

export function getTodos() { 
    return function(dispatch){ 
     axios.get('https://jsonplaceholder.typicode.com/todos') 
     .then(
     (response) => { 
     console.log('todos') 
     dispatch({type: 'TODOS_REQUEST_SUCCESS', payload: response}) 
     }) 
     .catch((err) => { 
     dispatch(todosRequestError(err)) 
     }) 
    } 
} 

В консоли я получаю "Я сделал все", "Todos", "фото". Как мне сначала изменить мой код для обновления хранилища, а затем записать «Я сделал все» в консоли?

Заранее спасибо

ответ

1

Вы должны вернуть себя обещание, так что сцепление применять синхронным, так попробуйте добавить return к axios.get('endpoint/url') в обеих функциях.

+0

Это работает ... спасибо – magnat

Смежные вопросы