andrey-tech / bx24-wrapper-js

Класс-обертка для стандартной JS-библиотеки Битрикс24. Позволяет избежать ада колбеков и работать c REST API Битрикс24, используя асинхронные функции и асинхронные генераторы ECMAScript 9.
MIT License
31 stars 14 forks source link

вопрос - как получить данные батча await bx24.callBatch(calls); в случае ошибки в одном из запросов #4

Closed AlexandreZaytsev closed 1 year ago

AlexandreZaytsev commented 1 year ago

Андрей - подскажите пожалуйста как из запроса deal_link = await bx24.callBatch(cmd_link, false); //С УЧЕТОМ БИТЫХ ССЫЛОК - ПОДАВЛЯЕМ ОШИБКИ получить то что пришло из батча если в одном из запросов батча была ошибка - в плане синтаксиса...

вызов типа

(async () => {
    let bx24 = new BX24Wrapper();
... допустим 10 запросов - на пятом битая ссылка  (удаленный id - объект в корзине)
    response = await bx24.callBatch(calls, false);
})().catch(error => console.log('Error:', error));

вернет в catch конкретную ошибку допустим на пятом запросе - но кроме того батч возвращает еще и данные остальных 9 запросов на которых ошибки небыло - вот как их достать? (как прочесть все что пришло и result и result_error)

в моем случае это выглядит в отладчике браузера как набираю батч - отправляю image в catch вылетаю с ошибкой image потом на вкладке сеть смотрю что пришло image вижу что данные есть, а как их достать? как правильно на js написать (не специалист в программировании)

в общем не получается дождаться выполнения всего батча целиком... вылетаю на ошибку до его окончания... ))

andrey-tech commented 1 year ago

Александр, похоже что без доработок библиотеки все остальные данные, полученные до возникновения ошибки, достать не получится. Сейчас можно получить только последний ответ от Битрикс24 методом getLastResult(). Как один из вариантов возможных доработок: при установленном флаге haltOnError = false не выходить при ошибках, а просто пропускать их.

AlexandreZaytsev commented 1 year ago

СПАСИБО!!! то что нужно заменил

(async () => {
    let bx24 = new BX24Wrapper();
... допустим 10 запросов - на пятом битая ссылка  (удаленный id - объект в корзине)
    response = await bx24.callBatch(calls, false);
})().catch(error => console.log('Error:', error));

на

(async () => {
    let bx24 = new BX24Wrapper();
... допустим 10 запросов - на пятом битая ссылка  (удаленный id - объект в корзине)

  b24_references.deal_link={};
   if(!isEmpty(cmd_link)){                      //наберем инфу для страницы счет (если она есть)
      b24_references.deal_link = await bx24.callBatch(cmd_link, false)  //С УЧЕТОМ БИТЫХ ССЫЛОК - ПОДАВЛЯЕМ ОШИБКИ
    .catch(error => {
            console.log('Error batch:', error);
        // Получаем последний объект ajaxResult, полученный от стандартной библиотеки Битрикс24
        let ajaxResult = bx24.getLastResult();
        for (let key of Object.keys(ajaxResult)){// {for (var key in ajaxResult) {
              if (ajaxResult[key].answer.error === undefined){
            catch_batch[key] = ajaxResult[key].answer.result;
           } else { 
            UIkit.notification(
                        '<span uk-icon=\'icon: warning\'></span> ' + 
                'Битая ссылка в сделке Б24<br>' + 
                key + ' '+ ajaxResult[key].answer.error.error + ' ' + ajaxResult[key].answer.error.error_description + '<br>' +
                '(callBatch ' + ajaxResult[key].query.method + ': ' + ajaxResult[key].query.data + ')<br>' +
                '<ul>возможно было проведено объединение двойников (Компаний/Контактов)' +
                '<li>проверьте и установите (перевыберите в карточке Сделки/Общие) ошибочные данные по сторонам участникам<br></li>' + 
                '<li>или обратитесь к администратору</li></ul>',
                {pos: 'bottom-right', timeout: notificationTimeoutNo, status: 'warning'});
            }
        }
    });
  }
   if (!isEmpty(catch_batch)){
    b24_references.deal_link = catch_batch; //если есть данные в catch -заберем их]
   }
})().catch(error => console.log('Error:', error));

во внутреннем catch через bx24.getLastResult(); получаем данные всего батча инфа по каждому запросу батча с описанием ошибки если есть - этот сatch срабатывает первым

во внешнем catch - чисто ошибка от проблемного запроса - этот catch срабатывает вторым

это и было нужно!!!!!!!!!!!!!!!!!! Спасибо большое!!!!

картинка image

andrey-tech commented 1 year ago

Исправленено в релизе v1.5.1

Спасибо @AlexandreZaytsev.