최근에 Node JS in Action 책을 읽음으로써 node.js를 학습하기 시작했습니다. 이것은 아마도 초보자 질문이지만 콜백 함수와 javascript 범위의 여러 게시물을 읽은 후에도이 코드의 제 5 장에있는 아이디어를 이해하는 데 여전히 문제가 있습니다.Node.js 콜백 내 콜백 함수 호출
function loadOrInitializeTaskArray(file, cb) {
fs.exists(file, function(exists) {
var tasks = [];
if (exists) {
fs.readFile(file, 'utf8', function(err, data) {
if (err) throw err;
var data = data.toString();
var tasks = JSON.parse(data || '[]');
cb(tasks);
});
} else {
cb([]);
}
});
}
function listTasks(file) {
loadOrInitializeTaskArray(file, function(tasks) {
for(var i in tasks) {
console.log(tasks[i]);
}
});
}
두 콜백 함수가 두 개의 함수로 분리되어 있습니다. listTasks (..)가 먼저 호출되고 나중에 loadorInitializeTaskArray (..)를 호출합니다. 내 문제는 여기에서 시작됩니다.이 호출은 노드별로 어떻게 처리됩니까? loadOrInitializeTaskArray는 두 개의 인수를 취하고 두 번째 인수는 시그니처에 따라 매개 변수를 허용해서는 안되는 콜백 함수이지만 그럴 수 있습니다!
언제 cb (..)가 loadorInitializeTaskArray에서 호출되는지, 그게 무엇입니까 (도우미 함수를 호출하는 동일한 함수)입니까?
"tasks"는 function loadOrInitializeTaskArray에서 선언 된 배열입니다. listTasks (..) 함수에서 어떻게 액세스 할 수 있습니까?
자바 스크립트에서 변수의 범위는 정의 된 함수와 모든 중첩 된 함수 내에 있음을 알고 있습니다. 그러나 여기에서 그것을 이해하기가 힘듭니다. 누군가 여기서 일어나는 일을 설명 할 수 있습니까? 고맙습니다.
Vishal에게 감사의 말을 전합니다. Javascript에 대한 타고난 지식이 부족하여 node.js를 학습하는 데 많은 영향을 미치는지 알지 못했습니다. 나는 오래 전에 클라이언트 측 자바 스크립트를 몇 개 만들었고 나는 잘되어야한다고 생각했다. 범위 지정, 종료와 같은 주제에 대해 중급/고급 javascript 가이드를 특별히 참조 할 수 있습니까? 그리고 당신은 맞습니다. 자바 언어에서 오는 노드에서의 코딩은 비동기식 콜백 모델과 혼동되고 있습니다. – Reza
그래, 나는이 책을 좋아한다. [JavaScript : The Definitive Guide] (http://shop.oreilly.com/product/9780596805531.do). 그것은 정말 코어 및 클라이언트 사이드 자바 스크립트를위한 멋진 소스입니다. 노드를 시작하려면 코어 자바 스크립트를 읽어야합니다. – Vishal