У меня проблема с цепочкой обещаний, которым назначены параметры:
вот моя начальная цепочка:
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.info(response);
history.push("/error");
});
}
Вот ошибка, которую я получаю:
TypeError: dispatch is not a function at bundle.js:76071
и это происходит в dispatchSetPrivacy.
Любая идея?
Обратный вызов then принимает только один аргумент. Используйте только history => вместо (history, dispatch)=> и возьмите dispatch из окружающей среды.
@Gnujeremie Нет, возврат неявный в стрелочных функциях без тела блока
@Bergi да ладно, я не заметил. Я привык писать блочные тела даже для простой отдачи.
Доступ к history в вызове dispatcherUserTermsPrivacy работать не будет. См. Как мне получить доступ к предыдущим результатам обещания в цепочке .then()?
@Bergi, но мне нужна отправка
@HamedMinaee У вас есть dispatch. Но не в результате звонка dispatchTermsCondition.
Вы ничего не возвращаете в аксиомах. Тогда, конечно, следующий не имеет параметров. Но я не уверен, почему вы передаете отправку в цепочке dispatchTermsCondition, разве она не доступна во внешней функции? Похоже, что в любом случае доступны redux-thunk, dispatch и getState, вы назначили их параметрам then, когда они уже были определены внешней функцией, которая является анти-шаблоном и здесь тоже не нужна. Было бы проще, если бы вы опубликовали все действие thunk, чтобы увидеть это.
Можете ли вы показать окружающий код? Любой импорт, объявление параметров, инициализация и т. д.?
@DominicTobias, плохо, вы правы, пожалуйста, добавьте это в качестве ответа, я приму это



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, эта строка:
.then((history, dispatch) =>
dispatchSetPrivacy(history, dispatch)
)
Вернет результат dispatchSetPrivacy, но в .then ничего не возвращается, поэтому не будет никаких параметров. Если вы хотите передать параметры, передайте что-нибудь в return, например:
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), и вы должны просто иметь возможность использовать их оттуда:
const yourThunk = (history, otherArg) => (dispatch, getState) => {
dispatchTermsCondition(history, dispatch)
.then(() =>
dispatchSetPrivacy(history, dispatch)
)
.then((response) =>
dispatcherUserTermsPrivacy(history, dispatch, getState, response.data.tj_id)
);
};
Обратите внимание: не совсем уверен, исходит ли история из модуля или из параметров, но вы поняли!
Прежде всего, я бы сказал, что вам не хватает операторов возврата перед dispatchSetPrivacy и dispatcherUserTermsPrivacy.