Closed agran closed 1 year ago
try catch может помочь.
А вообще все функции в библиотеке это промисы и у них ошибки ловятся с помощью .catch
В твоём случае можно сделать так.
const result = await user.reportFile({...}).catch(() => null);
if (result == null) console.log("Ошибка");
Иногда на каком-то запросе происходит задержка
Можешь в ручную увеличить время параметра timeout (см. документацию)
Как обработать неудачный запрос reportFile и сразу повторить с этого же места?
let result = null;
do {
result = await user.reportFile({...}).catch(() => null);
} while (result == null);
только лучше еще добавить счетчик итераций, чтобы это не было бесконечно
Не помогло, всё равно завершается с сообщением "DONE Сеанс ЛОГИН успешно закрыт".
Вот пример моего кода, всё равно вылетает скрипт.
var result = null;
var col = 0;
do {
console.log("reports/studenttotal/queue " + col);
result = await user.reportFile({
url: "reports/studenttotal/queue",
filters: [{
filterId: "PCLID",
filterValue: klassid, // ID класса
},
{
filterId: "SEPTYPE",
filterValue: "0", // ID класса
},
{
filterId: "period",
filterValue: period,
},
],
}).catch(() => null);
col++;
if (col > 1) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
} while (result == null && col < 25);
Можешь ещё бахнуть try catch он 100% все отловить сможет, только тут уже нужно будет использовать рекурсию
var result = null;
var col = 0;
do {
console.log("reports/studenttotal/queue " + col);
try {
result = await user.reportFile({
url: "reports/studenttotal/queue",
filters: [{
filterId: "PCLID",
filterValue: klassid, // ID класса
},
{
filterId: "SEPTYPE",
filterValue: "0", // ID класса
},
{
filterId: "period",
filterValue: period,
},
],
timeout: 120000,
}).catch(() => null);
} catch (err) {
console.log(JSON.stringify(err));
result = null;
}
col++;
if (col > 1) {
await new Promise(resolve => setTimeout(resolve, 1000));
}
} while (result == null && col < 25);
Посмотрю как этот код будет работать. Пока нормально.
А скинь скриншот ошибки, которая приводила к завершению кода
Пока не попадалась.
const { inspect } = require('util');
var parents = null;
do {
try {
parents = await user
.fetch("/webapi/userinfo/"+uchenikId+"/parents")
.then((res) => res.json());
} catch (err) {
console.log(inspect(err, { showHidden: true }));
await new Promise(resolve => setTimeout(resolve, 10000));
}
} while (parents !== null);
Таким кодом делаю повторные запросы, так как сервер иногда возвращает 503 ошибку.
Проблема в том что следующий код:
try {
result = await user.reportFile({
url: "reports/studenttotal/queue",
filters: [
{
filterId: "PCLID",
filterValue: klassid, // ID класса
},
{
filterId: "SEPTYPE",
filterValue: "0",
},
{
filterId: "period",
filterValue: period,
},
],
timeout: 5000
});
} catch (err) {
console.log(inspect(err, { showHidden: true }));
result = null;
}
Не отлавливает ошибку, а скрипт просто без всяких сообщений прекращает работу с случае если сервер что-то не то ответил. А хотелось бы в случае ошибки сервера попробовать сделать повторных запрос.
Подскажите пожалуйста как обрабатывать ошибки.
Например у меня есть цикл и я делаю подряд много запросов
var result = await user.reportFile({
Иногда на каком-то запросе происходит задержка, и вдруг скрипт прекращается выдав "DONE Сеанс ЛОГИН успешно закрыт". Если запустить повторно, то может дойти до конца, а может снова вылететь в другом месте.Как обработать неудачный запрос reportFile и сразу повторить с этого же места?