2016-09-07 4 views
0

이것은 일반적인 질문이지만, 왜 예를 들면, 몽구스 쿼리 기능을 수행합니다몽구스 쿼리 콜백 반환?

var myFunc = function(username, callback){ 
    User.findOne({username: username}, 'username name, password', function(err, user){ 
     callback(user); 
    }); 
}; 

myFunc('somename', function(userInfo){ 
    console.log(userInfo); 
}); 

사용자를 반환하는 다른 기능을 필요로? 단순히 내가 할 수없는 이유 : Node.js으로

var myFunc = function(username){ 
    User.findOne({username: username}, 'username name, password', function(err, user){ 
     return user; 
    }); 
}; 

var userInfo = myFunc('somename'); 
console.log(userInfo); 
+0

내부 함수 내부에서 return을 호출하면 리턴은 내부 함수에만 적용되며 외부 함수에는 적용되지 않습니다. 또한 봐 [이] (http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) 자세한 내용은 stackoverflow 게시물 –

답변

1

asynchronous way에서 실행 때때로 그것은 당신의 query 오랜 시간을 얻는 경우에 userInfo의 결과를 얻기 위해 실패합니다.

그런 다음 userInfo 값을 확인하려면 callback 또는 Promise을 사용해야합니다. Node.jsasynchronous nature에 대한 자세한 내용은

당신은

http://www.sohamkamani.com/blog/2016/03/14/wrapping-your-head-around-async-programming/]1 여기에서 볼 수 있습니다

당신은 값이 존재하지 않는 때문에 값을 반환 할 수 없음을 의미 비동기 작업, 작업하는 https://blog.risingstack.com/node-hero-async-programming-in-node-js/

0

노드 환경이 return 문에 도달하면.

데이터베이스 작업에 시간이 걸리며 그 동안 DB 조회 코드가 실행을 끝내고 노드는 현재 호출 스택에서 코드를 완료하거나 노드 이벤트 대기열에서 가져 오는 다른 작업을 수행하거나 유휴 상태로 있습니다.

일단 db 값이 반환되면 노드 환경에서 사용할 준비가 된 노드 이벤트 대기열에 콜백이 배치되고 콘솔에 인쇄됩니다.

데이터베이스가 조회 호출과 데이터베이스 값 사이에 오는 또 다른 URL 요청 인 경우 노드는 데이터베이스 요청을 처리하는 작업자 스레드와 데이터베이스 작업을 처리하는 작업자 스레드를 설정합니다. 작업자가 작업 (URL 요청 및 데이터베이스 조회)을 완료하면 콜백을 이벤트 대기열에 푸시합니다. 노드가 읽을 코드가 없으면 (스택이 비어 있음) 이벤트 대기열로 이동하여 해당 작업을 순서대로 실행합니다.