承诺链不能接受我的参数

时间:2018-06-07 15:22:39

标签: javascript ecmascript-6 promise axios

我有一个链接承诺的问题,这些承诺分配了参数:

这是我的初始链:

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:dispatch不是函数       在bundle.js:76071

它发生在dispatchSetPrivacy。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

所以这一行:

.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;
      })
      ...

没有必要传递调度和历史记录,因为它们可以从较高的范围(redux thunk)获得,你应该只能从那里使用它们:

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

请注意,不完全确定历史记录是来自模块还是来自params,但您明白了!