Я довольно новичок в JS и программировании в целом, и я столкнулся со следующей проблемой при попытке реализовать try / catch в моей функции asyn c. Это выглядит так:
(async function main() {
try {
await myFunc();
} catch (e) {
console.log(e)
}
setTimeout(main, 2000);
}) ();
Как вы можете видеть, оно зацикливается вызовом setTimeout, что делает его бесконечным ... если только он не улавливает ошибку. Естественно, я хочу попытаться повторить myFun c в некоторых случаях e, но не знаю, как это сделать, не удаляя setTimeout (и здесь важна задержка в 2 с).
Я пытался использовать метки :
let critErrCount;
(async function main() {
critErrCount = 0;
lbl:
try {
await myFunc();
} catch (e) {
if (e instanceof errType1) {
console.log(`errType1: ${e}`);
continue lbl;
} else if (e instanceof errType2) {
critErrCount += 1;
console.log(`errType2: ${e}`);
console.log(`critErrCount: ${critErrCount}`);
if (critErrCount == 5) {
console.log(`Too many critErrs, aborting...`)
process.exit;
}
continue lbl;
} else {
process.exit
}
}
setTimeout(main, 2000);
}) ();
И, конечно же, это не сработало, потому что, как я узнал, «continue» не ведет себя как «goto» в других языках, а работает только в правильных циклах (forEach, тогда как , для, et c.). Поскольку setTimeout внутри блока catch также не будет работать из-за особенностей nodejs времени выполнения (отображается как «Неверное продолжение оператора»), у меня нет идей.