рекурсивная функция javascript возвращает данные при использовании отладчика, но возвращает неопределенное значение без

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть функция, вызывающая несколько функций, каждый результат функции используется для следующего.

Одна из функций является рекурсивной, и когда я ставлю точку останова в операторе return, я получаю результат. Результат сохраняется в переменной, которая затем используется в качестве параметра для другой функции. Но когда я ставлю beakpoint перед вызовом следующего, переменная if не определена.

Ниже мой код, который, я надеюсь, будет понятнее, чем мои объяснения.

функция, вызывающая множественные функции :

 let calculateW = (settedCandles) => {
    
    try {
            
        let topAndBottomOnly = candlesController.getOnlyTopAndBottoms(settedCandles);
        
        let topAndBottomConsecutive = candlesController.getConsecutiveTopAndBottom(topAndBottomOnly);

        let potentialWs = _getPotentialW(topAndBottomConsecutive);

        let confirmedWs = _confirmW(potentialWs, settedCandles);

        return confirmedWs;
        
    } catch (error) {
        throw new Error("[wController][calculateW]"   error);
    }
}
 

рекурсивная функция :

 if(candles != undefined amp;amp; candles.length > 0 ){

    let consecutiveTopAndBottoms = candles;

    try {        

        let nbrOfTopBottom = 0;

        for (let i = 0; i < consecutiveTopAndBottoms.length; i  ) {
         [ ... ] 
       }
if(!_arrayContainsConsecutivesTopAndBottoms(consecutiveTopAndBottoms)){

            //added delay to avoid cpu "overheat" error
            // await utils.delay(10);
            getConsecutiveTopAndBottom(consecutiveTopAndBottoms);

        }else if(_arrayContainsConsecutivesTopAndBottoms(consecutiveTopAndBottoms)){

            return consecutiveTopAndBottoms;
        }
        
        
    } catch (error) {
        throw new Error(error);
    }
}else{
    throw new Error("[candleController][getConsecutiveTopAndBottom] - no candles or no setted candles");
}
 

Комментарии:

1. return Оператор возвращает только из текущего вызова, а не из всего стека рекурсии. Вы игнорируете результат getConsecutiveTopAndBottom(consecutiveTopAndBottoms) вызова, и в этой ветви if инструкции вы никогда return ни к чему не приводите undefined .

2. @Bergi, действительно, это правильно, я добавил возврат при рекурсивном вызове, и это сработало. Спасибо

Ответ №1:

Как сказал @Bergi, в рекурсивном вызове отсутствовал возвращаемый оператор.

Еще раз спасибо за вашу помощь