victorzadorozhnyy
@victorzadorozhnyy

Как правильн использовать Promise AJAX?

есть несколько похожих функций, хочу их все одновременно запустить и дождаться выполнения последней через Promise.all
getTotalGender(){
        
        var that = this;
     
        jQuery.post(

            MyAjaxChart.ajaxurl,
            {
                dataType: 'json', 
                'action': 'ReportGenderTotal',
                async: true
            }
        ).error( ( response )=> console.log( response )
        ).done( ( response )=> {
//нужно дождаться выполнения в Promise.all
                var myArray = JSON.parse( response );

                that.setState({ datasetGender: myArray });
           
            }
        );
    }

и хочу их запускать их
Promise.all( [ this.getTotalGender(), ... ] ).then( ()=> {
            
            console.log('this.state.datasetGender');
            console.log(this.state.datasetGender);//пустое значение, тк Promise не ждет полного выполнения
            
            this.setState({ ReportGender: <ReportGender
                dataset = { this.state.datasetGender }
            /> });
            
        });

Как такое сделать?
  • Вопрос задан
  • 698 просмотров
Решения вопроса 1
@vshvydky
Оберни ажакс в промис, а далее работай как в учебнике.
Только с промис алл есть подвох, если 1 из промисов даст реджект, то все остальные промисы будут потеряны.
getTotalGender(){
        var that = this;
        return new Promise((resolve, reject)=>{
                 jQuery.post(

            MyAjaxChart.ajaxurl,
            {
                dataType: 'json', 
                'action': 'ReportGenderTotal',
                async: true
            }
        ).error( ( response )=> {reject(response)}
        ).done( ( response )=> {
                      //нужно дождаться выполнения в Promise.all
                      resolve(response);
             });
});

Теперь мы имеем промис и можем запихнуть его в промис алл...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы