#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, в рекурсивном вызове отсутствовал возвращаемый оператор.
Еще раз спасибо за вашу помощь