Twstd
@Twstd
Разрабатываю приложения и микросервисы на Nodejs

Как при рекурсивном вызове функции избежать, многократного вызова вложенной функций?

Пример для Node js, необходим пакет readline-sync
const readline = require('readline-sync');
const { error } = require("console");

recursion();

function recursion() {
    let input = readline.question("Enter number > 10\n");
    one(input);
    two(input);
}

function one(input) {
    try {
        if (input < 10) throw error;
        console.log('выполняется функция one');
    } catch {
        console.error('Ошибка в функции one');
        recursion();
    }

}

function two(input) {
    console.log('выполняется функция two', input);
}


Суть вопроса: когда функция two выполняется, она выполняется столько раз, сколько было запусков функции recursion, как этого избежать?
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 3
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
await one(Number(input));
Ответ написан
Twstd
@Twstd Автор вопроса
Разрабатываю приложения и микросервисы на Nodejs
В итоге решил вопрос, так
const readline = require('readline-sync');
const { error } = require("console");

recursion();

function recursion() {
    let input = readline.question("Enter number > 10\n");
    try {
        one(input);
        two(input);
    } catch {
        recursion();
    }
}

function one(input) {
    try {
        if (input < 10) throw error;
        console.log('выполняется функция one');
    } catch(err) {
        console.error('Ошибка в функции one');
        throw err;
    }
}

function two(input) {
    console.log('выполняется функция two', input);
}
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
А каждый throw error приводит к выполнению блока catch{} ?

P.S. А при вводе 9-9-10 вывод в two() показывает 10-9-9, да?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы