Функцию cynteka проще переписать используя async/await
//Функция формирования импорт-файла для БСПБ
async function cynteka({dateFrom, dateTo, payerId, acceptor}) {
const params = [
dateFrom ? 'creationDateFrom=' + dateFrom : '',
dateTo ? 'creationDateTo=' + dateTo : '',
payerId ? 'payer=' + payerId : '',
acceptor ? 'acceptor=' + acceptor : '',
'pageSize=1'
].join('&');
let respBuffer = ''; //Буфер для вывода результата на экран
let url = 'https://***/api/v1/offers?' + params;
let count;
let filename = 'public/import-bspb.xlsx';
//Создаем пустой эксель и заполняем шапку
let xlsx = [
"№ пп",
"Несрочный платеж",
"Сумма",
"ИНН получателя",
"Наименование получателя",
"Р/сч получателя",
"БИК банка получателя",
"Код вида дохода",
"Назначение платежа",
];
workbook.addWorksheet('Лист 1').addRow(xlsx);
//Запрашиваем количество счетов
let response = await fetch(url, options);
let data = await response.json();
count = data.totalCount;
respBuffer += 'Обработаных счетов: ' + count + '<br>';
//Цикл обработки счетов
while (count){
let nds;
let response = await fetch(url + '&page=' + count, options)
let data = await response.json()
let offers = data.offers[0];
if (offers.vat != 0){
let vat = offers.vat * 100 +"%";
let vatAmount = (((offers.totalAmount / (1 + offers.vat) ) - offers.totalAmount) * -1).toFixed(2);
nds = `В том числе НДС ${vat} ${vatAmount} руб.`;
}else{
nds = "НДС не облагается";
};
try {
xlsx = [
offers.id,
"нет",
(offers.totalAmount).toFixed(2),
offers.supplier.inn,
offers.supplier.shortName,
offers.destinationAccount.currentAccount,
offers.destinationAccount.bik,
,
`Счет ${offers.producerOfferNumber} от ${moment(offers.producerOfferDate).format("DD-MM-YYYY")} ${nds}`,
];
workbook.getWorksheet('Лист 1').addRow(xlsx); //Добавлем обработанную строку в эксель
} catch (err) {
respBuffer += `Счет №${offers.id}: Ошибка обработки <input type="button" class="button13" value="Открыть в Синтека" onclick="window.open('https://***/core/offers/${offers.id}/report')">` + '<br>';
};
count--;
};
workbook.xlsx.writeFile(filename); //Сохраняем эксель файл
respBuffer += `Импорт-файл для БСПБ готов:` + '<br>';
respBuffer += `<button onclick="document.location='/import-bspb.xlsx'">Скачать</button> <button onclick="document.location='/'">Назад</button>`;
return respBuffer;
};
Вызывать ее
let rspb = await cynteka({...})
или
cynteka({...}).then ((rspb) => {...})