2014-09-26 2 views
4

node.js를 배우고 있습니다. 지금까지 콜백의 의미를 이해했지만 콜백이 동 기적으로 (콜백이 반환 될 때까지 진행되지 않는 호출자) 또는 비동기 적으로 (콜백을 만들어 코드를 진행하는) 실행되는지 여부를 확신하지 못합니다.콜백이 동 기적으로 또는 비동기 적으로 실행되는지 식별하는 방법은 무엇입니까?

+1

안녕하십니까. 안녕하세요. – DrakaSAN

+0

감사합니다 DrakaSAN :) – avinashkrsharma

+0

context of node.js – avinashkrsharma

답변

3

. Some callbacks are asynchronous, others are not. 문서를 확인해야합니다. 입니다.

종종 함수의 서명으로 구분할 수 있습니다. 콜백이 계산 결과와 함께 한 번만 호출되고 콜백 함수는 아무 것도 반환하지 않으면 콜백은 일반적으로 비동기 적으로 호출됩니다 (setTimeout, readFile 등). 함수가 결과를 즉시 반환하면 일반적으로 콜백은 여러 번 동 기적으로 호출됩니다 (Array::sort, Array::map). 중요한 값을 생성합니다. 물론 예외가 규칙을 증명하고 때로는 쉽게 알 수 없습니다. setIntervalArray::forEach (둘 다 반환하지 않고 콜백을 여러 번 호출합니다.)

-1

당신은 그것을 위해 플래그를 사용할 수 있습니다 : 당신은 정말 함수 호출을보고 말할 수

var async = false; 

someFunction(function() { 
    console.log(async ? 'async' : 'sync'); 
}); 

async = true; 
+0

플래그를 사용하고 싶지 않습니다. – avinashkrsharma

1

"비동기 함수 호출"및 "비동기 IO"용어에 많은 혼란이 있기 때문에 질문을 다시 말하려고합니다.

다음과 같이 코드를 작성하고 "foo"소스 코드를 보지 않고 출력이 "Line 1 \ nLine2"또는 "Line 2 \ nLine1"이 될 것이라고 말할 수 있습니까? ?

var t1 = asyncTestCapture(); 
foo(function() { 
    console.log("Line 1"); 
}); 
console.log("Line 2"); 
var out12vsOut21 = asyncTestVerify(t1); 

대답 번호 1 : 콜백 매개 변수 (배열의 대해 forEach,지도, 등, 문자열 대용품, JSON의 자극성)

대답으로 잘 알려진 표준 기능을 제외하고 순서에 의존하지 않는 2 번 : (I 아주 간단하게 코드를 테스트하고 Node.js를 특정,하지만 나는 그것이 "out12vsOut21"질문에 대답 할 수 믿고 있습니다 또한 내가 문서화되지 않은 노드 기능을 사용하고 있습니다.)

function asyncTestCapture() { 
    return { 
    activeHandles: process._getActiveHandles(), 
    activeRequests: process._getActiveRequests() 
    }; 
} 

function asyncTestVerify(handles1) { 
    var handles2 = asyncTestCapture(); 
    return handles2.activeHandles === handles1.activeHandles && handles2.activeRequests === handles1.activeRequests 
} 

나 ' 다시 반복 할 것입니다 : 위의 코드가 필요한 경우 잘못된 것이 있습니다. 귀하의 디자인. "out12vsOut21"명령을 알 필요가 없습니다. 코드가 "async 또는 foo is not"에 종속되지 않는 방식으로 빌드하십시오.

관련 문제