Redux реагирует, не устанавливая значение после вызова действия / редуктора - PullRequest
0 голосов
/ 13 октября 2018

В своем действии я получаю JSON-ответ от сервера после того, что я установил SET_CURRENT_STORAGE в редукторе.Во второй отправке я обрабатываю результат первого действия и пытаюсь установить полезную нагрузку с помощью пользовательской функции getStorageCapacity().

Ниже приведен мой код для действия

export function fetchStorage() {
  return function(dispatch) {
    return fetch('/api/dashboard/storage', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      credentials: 'include'
    })
      .then(response => response.json().then(body => ({ response, body })))
      .then(({ response, body }) => {
        //calculate storage
        if (!response.ok) {
        } else {
          var test1 = body.value;
          var take1 = Promise.resolve(
            dispatch({
              type: 'SET_CURRENT_STORAGE',
              payload: body.value
            })
          );
          take1.then(function() {
            dispatch({
              type: 'SET_CURRENT_STORAGE_CAPACITY',
              payload: getStorageCapacity(test1)
            });
          });
        }
      });
  };
}

export function getStorageLevel(payload) {
  return 'High';
}

export function getStorageCapacity(test1) {
  console.log('reached ' + test1);
  var arr = [];
  for (var key in test1) {
    console.log(test1[key]);
  }
  test1.forEach((item, i) => {
    console.log(item.capacity);
    return item.capacity;
  });
}

export function getStorageAvailable(payload) {
  return '150';
}

export function getStorageUsed(payload) {
  return '10';
}

Ниже приведен мой код для редуктора

import {
  SET_CURRENT_STORAGE,
  SET_CURRENT_APPLICATION_SERVICES,
  SET_CURRENT_STORAGE_LEVEL,
  SET_CURRENT_STORAGE_CAPACITY,
  SET_CURRENT_STORAGE_AVAILABLE,
  SET_CURRENT_STORAGE_USED
} from '../actions/typesActions';
import isEmpty from '../validation/is-empty';
const initialState = {
  storageValue: [],
  storageLevel: 'Low',
  storageCapacity: '60',
  storageAvailable: '50',
  storageUsed: '10',
  appSerStatus: []
};

export default function(state = initialState, action) {
  console.log(state);

  switch (action.type) {
    case SET_CURRENT_STORAGE:
      return {
        ...state,
        storageValue: action.payload
      };
    case SET_CURRENT_APPLICATION_SERVICES:
      return {
        ...state,
        appSerStatus: action.payload
      };
    case SET_CURRENT_STORAGE_LEVEL:
      return {
        ...state,
        storageLevel: action.payload
      };
    case SET_CURRENT_STORAGE_CAPACITY:
      console.log(action);
      return {
        ...state,
        storageCapacity: action.payload
      };
    case SET_CURRENT_STORAGE_AVAILABLE:
      return {
        ...state,
        storageAvailable: action.payload
      };

    case SET_CURRENT_STORAGE_USED:
      return {
        ...state,
        storageUsed: action.payload
      };
    default:
      return state;
  }
}

Всякий раз, когда я обрабатываю с использованием foreach, этовозвращается как undefined , но когда я жестко кодирую возвращаемое значение в getStorageCapacity(), значение возвращается, как и ожидалось.

Любая идея, в чем может быть причина? **

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

возвращаемое значение из forEach не определено

функция .forEach () должна продолжать цикл - она ​​игнорирует возвращаемое значение из вашей функции.

0 голосов
/ 13 октября 2018

Возврат из forEach не возвращается из функции getStorageCapacity, он возвращается из цикла.

Возможно, вы захотите попробовать что-то вроде этого:

export function getStorageCapacity(test1) {
  console.log('reached ' + test1);
  var arr = [];
  for (var key in test1) {
    console.log(test1[key]);
  }
  arr = test1.map((item, i) => {
    console.log(item.capacity);
    return item.capacity;
  });
  return arr;
}
...