не ждите, пока функция asyn c закончит редукцию - PullRequest
0 голосов
/ 05 марта 2020

Я попытался реализовать 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 [];
    });
}

Если кто-нибудь знает, пожалуйста, дайте мне знать. Спасибо, или

...