Axios zwrócenie wartości zamiast promisa

0

Jak zamiast promisa mogę zwrócić wartość z funkcji. Mam taką funkcję

export const getTodos = () => {
    return axios.get('tasks/tasks')
    .then(res => {
        console.log(res.data)
        return res.data
    })
    .catch(err => {
        console.error(err)
    })
}

W tym logu w czwartej linii dostaje dobrą odpowiedź z serwera listę 3 todos, ale jak wywołam tą funkcję w mojej akcji reduxowej, bądź gdziekolwiek indziej to zwraca ona promise i nie wiem jak wyciągnąc z niej wartośc zamiast promisa

Próbowałem tak getTodos().then(res => console.log(res)) i w ten sposób dostaje w konsoli moje todos, ale gdy zrobię coś takiego w mojej akcji reduxowej

export const getAllTodos = () => ({
    type: 'GET_TODOS',
    todos: getTodos().then(res => res)
})

To w reducerze znowu otrzymuje promise

const todos = (state = [], action) => {
    console.log(action.todos)
    switch(action.type) {
        case 'GET_TODOS':
            return [...state, action.todos]
        default:
            return state
    }
}

Link do loga z reducera Link

0

Z promise jak z monadą IO. Jak wypakujesz promisa to tracisz większość zalet promise

3

Nie wypakujesz obiektu Promise w prosty sposób. Masz kilka wyjść. Możesz zrobić np. tak:

export const getTodos = () => {
    return axios.get('tasks/tasks')
      .then(res => dispatch({ type: 'GET_TODOS', todos: res.data}))
      .catch(err => {
        console.error(err)
    })
}

Albo użyć Redux Thunk lub Redux Saga.

1 użytkowników online, w tym zalogowanych: 0, gości: 1