2014-06-21 3 views
0

현재 프로젝트에 node.js와 monogdb를 사용하고 있습니다. 나는 문제를 풀려고 노력했지만 희망이 없다. 그래서 네 도움이 필요해. main.js의 경로에 Mongo 쿼리 콜백 결과를 전달하는 데 문제가 있습니다.MongoDB는 "undefined"node.js를 반환합니다.

이 기능의
DBManagerConnection.prototype.findSubscriber = function(id){ 
    database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){ 
     if(err || !subscriberid){ 
     console.log("No Subscriber recoard here"); 
     }else{ 
     console.log("Find:"); 
     console.log(subscriber); 
     return subscriber; 
     } 
    }); 
} 

출력은 다음과 같습니다 :

Find: 
{ _id: 53a597665f8930ed1665c612, 
    subscriberId: 'Sub8efc871fc6fc43765b2c9', 
    subscriberName: 'Sub1', 
    subscriberDevices: [], 
    subscriberIndex: [], 
    date: Sat Jun 21 2014 10:32:06 GMT-0400 (EDT) } 

지금까지 너무 좋아하지만 난 그것을 반환 main.js이 함수를 호출 할 때 '미정'으로 mongoDB.js 클래스에서 나는이 기능이 아래 :

var subb = null; 
subb = db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9'); 
setTimeout(function(){console.log(subb)}, 1000); 

출력이 정의되지 않았습니다.

아무도 도와 줄 수 있습니까? 감사합니다.

답변

1

귀하의 findSubscriber 기능은 아무것도 반환하지 않습니다.

나는 명확하게하려고합니다 :

DBManagerConnection.prototype.findSubscriber = function(id){ 

    database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){ 
    if(err || !subscriberid){ 
     console.log("No Subscriber recoard here"); 
    } else{ 
     console.log("Find:"); 
     console.log(subscriber); 
     return subscriber; 
    } 
    }); 

}; 

귀하의 return 라인이 아닌 function(id){ 기능의 내부는 function(err, subscriber){ 기능의 안에 있습니다. 따라서이 경우 return subscriber;을 수행하면 해당 값이 이 아닌 .findOne의 논리로 반환됩니다.

다른 콜백와 함께 할 것입니다 달성하기 위해 노력하고있다 일반적으로 무엇을 : 당신의 도움과 시간에 대한 형제를 많이

DBManagerConnection.prototype.findSubscriber = function(id, callback){ 
    database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){ 
    if(err || !subscriber){ 
     console.log("No Subscriber record here"); 

     callback(err, null); 
    } else{ 
     callback(null, subscriber); 
    } 
    }); 
}; 

db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9', function(err, subscriber){ 
    console.log(err, subscriber); 
}); 
+0

클리어 및 샘플. 이제 콜백 함수에 대해 더 알아야합니다. 나는 그것을 이해하지 못하는 것 같습니다. 도와 주셔서 감사합니다. – user3492113

0

"return"키워드를 사용하여 비동기 호출에서 값을 되돌릴 수 없습니다. 콜백으로 다시 전달해야합니다. 여기에 코드입니다 :이 undefined로 설정되고, 그래서

DBManagerConnection.prototype.findSubscriber = function(id, callback){ 
    database.Subscriber.findOne({subscriberId:id}, function(err, subscriber){ 
    if(err || !subscriberid){ 
     console.log("No Subscriber recoard here"); 
     callback({message: "Not found"}); 
    }else{ 
     console.log("Find:"); 
     console.log(subscriber); 
     callback(null, subscriber); 
    } 
    }); 
}; 


db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9', funciton(err, result) {  
    if (err) { 
    console.log(err); 
    } else { 
    console.log(result); 
    } 
}); 
+0

감사하지만 난 마지막 대답하겠습니다. – user3492113

관련 문제