Почему Redux Promise возвращает неразрешенное обещание, если указано больше, чем тип и параметры полезной нагрузки?

Мне трудно понять, почему это происходит, но, по сути, Redux Promise работал нормально, возвращая что-то вроде:

    return {
      type: STORY_ACTIONS.STORY_SPOTIFY_REQUEST,
      payload: request
    }

Тем не менее, теперь мне нужно передать другую информацию, как это

    return {
     order: 0, // New field
     type: STORY_ACTIONS.STORY_SPOTIFY_REQUEST,
     payload: request
    }

Это приводит к нерешенному обещанию вместо данных. Я пытался переименовать order что-то вроде position или же index... еще ничего.

1 ответ

Решение

Вы должны использовать meta поле, обязательное для Redux Promise. Redux Promise использует Flux Standard Actions (FSA), который проверяет действие следующим кодом:

import isPlainObject from 'lodash.isplainobject';

const validKeys = [
  'type',
  'payload',
  'error',
  'meta'
];

function isValidKey(key) {
  return validKeys.indexOf(key) > -1;
}

export function isFSA(action) {
  return (
    isPlainObject(action) &&
    typeof action.type !== 'undefined' &&
    Object.keys(action).every(isValidKey)
  );
}

export function isError(action) {
  return action.error === true;
}

Как видите, для правильных ключей есть только четыре зарезервированных слова. Таким образом, вы должны добавить свойство order в "payload" или, возможно, "meta".

Другие вопросы по тегам