2013-06-01 6 views
2

나는 ExpressJS로 Node.js에서 응용 프로그램을 개발 중입니다. 이벤트 중심 개발에 익숙하지 않으며 이벤트 중심 아키텍처 및 가시성에 대한 기본적인 질문이 있습니다.콜백의 값 사용

나는 여러 MySQL 쿼리를 만들어 하나의 JSON 객체로 반환해야하는 서비스를 가지고 있습니다. 다음과 같이 입력하십시오 :

exports.someService = function(..) { 
    mysql.query("some select", function(rows...) { 
    // here I want to store the rows in a way to be visible from parent function 
    }); 

    mysql.query("some other select where id=some value from previous select", function(rows...) { 
    res.send(rows from this query + rows from previous query) 
    }); 
} 

어떻게하면됩니까?

답변

2

콜백 결과를 사용하려면 콜백 자체 내에 결과를 사용하는 코드를 배치해야합니다.

그래서 당신의 예는 될 것입니다 : 당신은 당신의 콜백 함께 때문에 체인이

exports.someService = function(..) { 
    mysql.query("some select", cb1); 
} 

function cb1(sql_result_1) { 
    mysql.query("some other select where id=some value from previous select", 
     function(sql_result2) { cb2(sql_result_1, sql_result2) }); 
} 

function cb2(sql_result_1, sql_result2) { 
    res.send(rows from this query + rows from previous query) 
} 

:

exports.someService = function(..) { 
    mysql.query("some select", function(rows...) { 

     mysql.query("some other select where id=some value from previous select", 
     function(rows...) { 
     res.send(rows from this query + rows from previous query) 
    }); 
    }); 
} 

당신은 않은 중첩 당신의 콜백을 그들에게 전달 관련 매개 변수에 의해 그것을 청소 수 있습니다 , 이벤트 기반 모델에서 코드가 차단되지 않습니다.

예를 들면,

mysql.query("...", some_cb); 
mysql.query("...", some_other_cb); 

some_cbsome_other_cb은 개념적으로, 동시에 실행됩니다. 이는 Control이 익숙한 일반적인 line-by-line 메서드 대신 콜백을 통과하기 때문입니다.

+1

@ Georgi 나는 매개 변수 이름을 정리하고 좀 더 명확하게 만들기 위해 약간의 수정 작업을했습니다. –