Это потому, что вы думаете, что возвращаете ответ, но то, что вы на самом деле возвращаете, - ничто, потому что вы обработали результат обещания в цепочке .then
.
У вас есть два варианта:
Верните обещание и разрешите его в .then:
function fetchSocialNetworkData() {
return new Promise((resolve) => {
axios
.get(`http://localhost:5000/socialRoute`)
.then(data => {
let response = Object.assign({}, data);
if (
response &&
response.data &&
response.data.tweets &&
Array.isArray(response.data.tweets)
) {
console.log("data.tweets: ", response.data.tweets);
resolve(response.data.tweets);
}
resolve([]);
})
})
}
ИЛИ
Используйте async / await (современный способ)
async function fetchSocialNetworkData() {
const data = await axios.get(`http://localhost:5000/socialRoute`);
let response = Object.assign({}, data);
if (
response &&
response.data &&
response.data.tweets &&
Array.isArray(response.data.tweets)
) {
console.log("data.tweets: ", response.data.tweets);
return response.data.tweets;
}
return [];
}
Оба из них - то же самое под капотом. IE они оба разные способы написания обещания.
Теперь. в своем толпе вы все еще просто вызываете эту функцию, что означает, что вы получите нерешенное обещание, а не результат этого обещания. Таким образом, гром становится следующим:
export const getSocialNetworkData = () => {
return async (dispatch) => {
dispatch({
type: GET_SOCIAL_NETWORK_DATA,
payload: await fetchSocialNetworkData(),
});
};
};
От этого следует отказаться: вы можете далеко уйти, не понимая обещаний, но недостаток понимания всегда будет потолком для ваших JS навыков.