Closed AlexandreZaytsev closed 1 year ago
Александр, похоже что без доработок библиотеки все остальные данные, полученные до возникновения ошибки, достать не получится. Сейчас можно получить только последний ответ от Битрикс24 методом getLastResult()
.
Как один из вариантов возможных доработок: при установленном флаге haltOnError = false
не выходить при ошибках, а просто пропускать их.
СПАСИБО!!! то что нужно заменил
(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 срабатывает вторым
это и было нужно!!!!!!!!!!!!!!!!!! Спасибо большое!!!!
картинка
Исправленено в релизе v1.5.1
Спасибо @AlexandreZaytsev.
Андрей - подскажите пожалуйста как из запроса deal_link = await bx24.callBatch(cmd_link, false); //С УЧЕТОМ БИТЫХ ССЫЛОК - ПОДАВЛЯЕМ ОШИБКИ получить то что пришло из батча если в одном из запросов батча была ошибка - в плане синтаксиса...
вызов типа
вернет в catch конкретную ошибку допустим на пятом запросе - но кроме того батч возвращает еще и данные остальных 9 запросов на которых ошибки небыло - вот как их достать? (как прочесть все что пришло и result и result_error)
в моем случае это выглядит в отладчике браузера как набираю батч - отправляю в catch вылетаю с ошибкой потом на вкладке сеть смотрю что пришло вижу что данные есть, а как их достать? как правильно на js написать (не специалист в программировании)
в общем не получается дождаться выполнения всего батча целиком... вылетаю на ошибку до его окончания... ))