Axios zwrócenie wartości zamiast promisa

Axios zwrócenie wartości zamiast promisa
Kawka
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 24
0

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

Kopiuj
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

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

To w reducerze znowu otrzymuje promise

Kopiuj
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

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5549
0

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

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 250
3

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

Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.