Сеть Promise не может принять мои параметры - PullRequest
0 голосов
/ 07 июня 2018

У меня проблема с цепочкой обещаний, которым назначены параметры:

вот моя начальная цепочка:

dispatchTermsCondition(history, dispatch)
        .then((history, dispatch)=>
             dispatchSetPrivacy(history, dispatch)
         )
         .then(()=>
                dispatcherUserTermsPrivacy(history,dispatch, getState,response.data.tj_id)
          );

Первая цепочка работает нормально, а когда дело доходит до второйон не может найти параметры, которые я отправил ему.Вот моя вторая функция (dispatchSetPrivacy):

export function dispatchSetPrivacy(history, dispatch) {
return axios.get("some url")
    .then((response) => {
        dispatch({
            type: SET_PRIVACY,
            payload: {
                privacy: {id: response.data.id, content: response.data.content, version: response.data.version }
            }
        });

    }).catch(function(response){


        console.log(response);
        history.push("/error");
    });
 }

Вот ошибка, которую я получаю:

TypeError: диспетчер не является функцией в bundle.js: 76071

и это происходит в dispatchSetPrivacy.

Есть идеи?

1 Ответ

0 голосов
/ 07 июня 2018

Итак, эта строка:

.then((history, dispatch) =>
  dispatchSetPrivacy(history, dispatch)
)

Вернет результат dispatchSetPrivacy, но в .then ничего не возвращается, поэтому не будет никаких параметров.Если вы хотите передать параметры, то передайте что-то в возврате, например:

export const dispatchSetPrivacy = (history, dispatch) =>
    axios.get("some url")
      .then((response) => {
        dispatch({
          type: SET_PRIVACY,
          payload: {
            privacy: { id: response.data.id, content: response.data.content, version: response.data.version }
          }
        });
        return response;
      })
      ...

Нет необходимости передавать диспетчер и историю, так как они доступны из верхней области видимости (избыточный толчок)и вы должны просто иметь возможность использовать их оттуда:

const yourThunk = (history, otherArg) => (dispatch, getState) => {
  dispatchTermsCondition(history, dispatch)
    .then(() =>
      dispatchSetPrivacy(history, dispatch)
    )
    .then((response) =>
      dispatcherUserTermsPrivacy(history, dispatch, getState, response.data.tj_id)
    );
};

Обратите внимание, что не совсем точно, если история исходит от модуля или от параметров, но вы поняли!

...