Я попытался реализовать thunk для нашего проекта и не смог заставить его работать с асинхронными вызовами c. Из отладки я вижу, что код вызывает API, запрашивает и выполняет диспетчеризацию с пустыми данными до возврата результатов. Единственная проблема, о которой я могу подумать, это то, что я не правильно определил thunk.
После моего кода.
Я добавил его в магазин:
let Store;
if (NODE_ENV == 'dev'){
const { composeWithDevTools } = require('redux-devtools-extension');
Store = createStore(
connectRouter(history)(Reducers),
composeWithDevTools(
applyMiddleware(
thunk,
routerMiddleware(history)
),
)
)
} else {
Store = createStore(
connectRouter(history)(Reducers),
compose(
applyMiddleware(
thunk,
routerMiddleware(history)
),
)
);
}
добавил сундук к действиям:
export function restartSearchAds(is_bookmark){
console.log('outside')
return dispatch => {
console.log('inside')
const searchParams = getInitSearchParams(is_bookmark);
dispatch({
type: AdsType.ADS.RESET_SEARCH_PARAMS,
searchParams,
page:1
});
dispatch(searchAds(searchParams, 1));
}
}
export function searchAds(searchParams, page, token, dosearch=0) {
//logic to get data filters....
let data = qs.stringify(searchData);
return function(dispatch){
return new Promise((res,rej) =>{
api.doSearch(data)
.then(ads => {
page == 1
? dispatch({type: AdsType.ADS.LOADED_DEFAULT_ADS, ads: ads, isOffers:false})
: dispatch({type: AdsType.ADS.ADD_ADS_RESULT, ads: ads, finished: false});
});
})
};
}
также будет опубликовать функцию запроса API:
export async function doSearch(data){
axios({
url: //the url,
method: 'post',
data: data
}).then(function(result) {
if (result.data.status == "ok") {
let ads = [];
for (let key in result.data.data.adObj) {
ads = result.data.data.adObj[key];
}
return ads;
} else {
return [];
}
}, function (error) {
console.error(error);
return [];
});
}
Если кто-нибудь знает, пожалуйста, дайте мне знать. Спасибо, или