2014-02-26 5 views
0

저는 node.js를 처음 사용하며 자바 스크립트를 처음 사용했습니다. 콜백이 작동하는 방식을 이해하고 직접 함수를 시험해보고 싶었습니다.node.js의 콜백 함수

MyScript.js : 여기 내 코드입니다

var calledfunction = function() 

{ 

    console.log("This is a called function"); 

    for(i=0;i<1090660;i++) 

    { 


     console.log(i); 

    } 


    console.log('done'); 

}; 

var sayHello = require('./sayhello.js'); 

objhello = new sayHello(); 

objhello.setupSuite(1,calledfunction); 

console.log('Next statement;'); 

sayhello.js 위의 프로그램을 실행하여 실행

var _ = require('underscore'); 
module.exports = exports = CLITEST; 

function CLITEST(param1,param2) 
{ 
} 


_.extend(CLITEST.prototype, { 
    setupSuite: function (here,callback) { 
    console.log(here); 
    console.log('This is a callback function'); 
    callback(); 
    } 
    }) 

> 노드 Myscript.js는

내 질문은 : for 루프는 콘솔에서 모든 숫자를 실행하고 인쇄하는 데 50 초를 소비하고 th en은 콜백 함수 외부에있는 "Next statement"행만을 실행합니다.

왜 이런 일이 발생합니까? 즉각적인 성명서는 기능이 실행될 때까지 기다리지 않고도 실행된다는 이론을 읽으므로 말입니다.

이상적인 출력 된해야 인쇄 "다음 문"다음 루프

의 내용을 인쇄하지만 위의 경우는 그 반대의 경우도 마찬가지입니까?

+0

코드 서식을 수정하려고합니다. 읽기가 어렵습니다. – codebox

+0

코드에 비동기 함수가 없습니다. 먼저 '다음 문'을 먼저 인쇄해야합니까? – thefourtheye

답변

2

이것은 실제 콜백이 아니지만 이라는 간단한 함수 호출입니다. 함수 호출은 명백하게 동기식입니다. 다음 문은 반환 값에 의존 할 수 있습니다.

콜백 비동기를 사용하려면 실제 사용 사례에 따라 setTimeout 또는 setImmediate을 사용할 수 있습니다.

은 참조 : Are all Node.js callback functions asynchronous? 덧글 중 하나에 의해 지적

2

이 코드는 동기 방식으로 실행된다. 함수 호출은 하나씩 차례대로 실행되므로 마술은 일어나지 않고 콜백 실행 후 console.log('Next statement;'); 호출이 실행됩니다. 비동기 호출 (즉, 콜백을 사용하는 AJAX 호출)을 실행해야하는 상황에 있다면 예 : 비동기 호출 바로 다음에 console.log이 실행될 것으로 예상됩니다.

다른 말로하면, 코드는 간단한 함수 호출을 나타내며 비동기 호출은 다른 곳에서 콜백 계산을 오프로드하므로 콜백 함수가 호출 된 코드의 실행은 명령문을 실행하고 콜백 실행을 기다리지 않습니다.