Внутри асинхронного действия c Redux Я собираю некоторые данные, используя graphQL, а затем вызываю другое асинхронное действие c, которое зацикливается в объекте (используя forEach) и добавляет некоторые ключи.
В UserTopicActions.js
:
export const sendGetUserTopicSuccess = data => ({
type: action_types.SEND_GET_USER_TOPIC_SUCCESS,
data
});
...
export function sendGetUserTopic(user_id, nextToken = null) {
return async (dispatch) => {
dispatch(sendGetUserTopicBegin());
...
try {
const data = await API.graphql(graphqlOperation(gqlUserTopic.getUserTopic, variables))
data_uri = await getCarouselImgUri(data.data.getUserTopic)
dispatch(sendGetUserTopicSuccess(data_uri));
} catch (err) {
dispatch(sendGetUserTopicFailure(err));
}
};
}
В amplifyAsync.js
:
import { Storage } from 'aws-amplify';
export default async function getCarouselImgUri(raw_data) {
data = JSON.parse(raw_data.data)
topics = data.topics
// Fetching thumbnails for cards
let card_img_uri
topics.forEach((topic) => {
topic['subtopics'].forEach(async (subtopic) => {
card_img_uri = 'topic/' + topic.id + '/' + subtopic.id + '/' + 'thumbnail.jpg'
subtopic['uri'] = await Storage.get(card_img_uri) <------------ New Key!
})
})
console.log(topics)
return topics
}
В UserTopicReducer.js
export default (state = initialState, action) => {
switch (action.type) {
case SEND_GET_USER_TOPIC_BEGIN:
return {
...state,
isGettingUserTopic: true,
};
case SEND_GET_USER_TOPIC_SUCCESS:
console.log(action.data)
return {
...state,
isGettingUserTopic: false,
topics: action.data
};
...
Если я утешу .log action.data в редукторе, я вижу новые ключи. С другой стороны, в состоянии и отправленном действии SEND_GET_USER_TOPIC_SUCCESS
новые ключи отсутствуют.
Почему? Как добавить новые ключи в данные действия Redux asyn c?