Node.js에는 재귀 호출의 리턴 값에 따라 여러 가지 지점에서 발생할 수있는 재귀 함수가 있습니다. 작은 테스트 케이스에서는 작동하지만, 일단 더 큰 데이터 세트를 얻으면 비동기 성은 그것을 망칩니다.Node.js 비동기식 재귀 콜백
내가 콜백을 사용하고 히트 반복의 양이 데이터 세트의 길이와 일치하는지 확인하려고했지만, 어떤 이유로 모두를 반복하기 전에 중지 (아마도 메모리 문제?)
는 여기
function recursiveCall(value, array, callback) {
callback(value)
if (/*base case*/) {
return value;
}
for (var i = 0; i < array.length; i++) {
if (/*conditional*/) {
var x = /* work + */ value
return recursiveCall(x, array, callback);
}
.
.
.
if (/*conditional*/) {
var x = /* work + */ value
return recursiveCall(x, array, callback);
}
}
}
var iters = 0;
var finalValue = recursiveCall(initialValue, array, function(value) {
if (++iters >= array.length)
console.log(value);
});
내가 finalValue와의 값이 정의되지 않은 것 이해하지만, 작은 테스트 케이스와 함께 일 원래 구현의 일부입니다 : 산발적 전화와 일반 코드의 흐름, 지금까지이 콜백합니다.
끝에 값을 기록 할 수 있어야합니다.
도움을 주셔서 대단히 감사합니다! 대단히 감사합니다!
어떤 부분이 비동기입니까? 전적으로 동기식 인 것 같습니다. – McMath
콜백이 재귀 적이 아닙니다. 'recursiveCall'의 재귀 적 반복마다 호출되는 익명의 함수입니다. 귀하의 재귀 호출은 꼬리 위치에있는 것 같습니다. node.js 또는 기본 크롬 엔진이 이미 TCO를 지원하는지 여부는 알 수 없습니다. 어쩌면 스택 오버플로입니까? – ftor