Redux thunk - Вложение отправленных функций / действий - PullRequest
1 голос
/ 11 ноября 2019

Я использую redux-thunk для выполнения асинхронных действий в моем приложении реагирования, например так:

export const fetchImages = (objects) => dispatch => {
   const promises = objects.map(obj => axios
       .get(`${API_URL}/files/${obj.img ? vendor.img : 'default.png'}`, {responseType: 'arraybuffer'})
       .then( res => obj.imgData = 'data:;base64,' + convertArrayBufferToBase64(res.data))
   );
   return Promise.all(promises).then (() => Promise.resolve(objects));
}

это прекрасно работает, когда я использую его в любом из моих компонентов. Однако, если я использую его в другом действии, например, так:

export const fetchAllObjects = () => dispatch => axios.get(`${API_URL}/objects?limit=50`)
   .then(res => fetchImages(res.data.docs).then(objects => 
       dispatch({
           type: FETCH_ALL_OBJECTS,
           payload: objects
       });
   ));

, это не удастся. Я ожидаю, что он вернет обещание, однако он вернет «dispatch => ...» и, следовательно, then() не вернется к возвращенному значению.

1 Ответ

1 голос
/ 11 ноября 2019

Я только что заметил, что fetchImages - это функция, которая возвращает функцию:

export const fetchAllObjects = () => dispatch => axios.get(`${API_URL}/objects?limit=50`)
   .then(res => fetchImages(res.data.docs)(dispatch).then(objects => 
       dispatch({
           type: FETCH_ALL_OBJECTS,
           payload: objects
       });
   ));
...