[英]MongoDB returns “undefined” node.js
我正在為當前項目使用node.js和monogdb。 我遇到了我想解決的問題,但沒有希望。 因此,我需要您的幫助。 我在將Mongo查詢回調的結果傳遞到main.js中的路由時遇到問題。 在mongoDB.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調用此函數時,它將返回“未定義”,如下所示:
var subb = null;
subb = db.findSubscriber('CPNsSub8efc871fc6fc43765b2c9');
setTimeout(function(){console.log(subb)}, 1000);
輸出未定義。
誰能幫我嗎? 謝謝
您的findSubscriber
函數不返回任何內容,因此將其設置為undefined
。
我將嘗試使之更清楚:
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(err, subscriber){
函數內部,而不位於function(id){
函數內部。 因此,在這種情況下,當您執行return subscriber;
,你是該值返回到的邏輯.findOne
,不是的調用點.findSubscriber
。
通常,您要完成的工作將通過另一個回調完成:
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);
});
使用“ return”關鍵字在異步調用中傳回值將不起作用。 您需要使用回調將其傳遞回去。 這是代碼:
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);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.