Javascript(mongojs):在函数中返回一个值
2013-04-27
516
我正在使用 mongojs,我必须从 mongodb 中获取的对象中检索一个字段。 我不明白如何返回该字段:
function retrieveVertById(id){
var result = [];
db.clusters.find({id: id}, function (err, clusters){
if( err || !clusters) console.log("No cluster found");
else clusters.forEach( function (cluster) {
vert = cluster["vertices"];
result.push(vert);
console.log(result);
});
})
return result;
};
var a = retrieveVertById("001");
console.log(a);
'forEach' 中的打印打印了正确的值: (例如 [ [ [ 8, 2, 2 ], [ 2, 2, 5 ], [ 2, 2, 2 ], [ 5, 2, 2 ] ] ] ) 相反,循环外的打印显示一个空数组。 返回不起作用的原因是什么? 提前感谢您的帮助。
2个回答
我没有使用过 mongojs,但任何数据库查找几乎肯定都是异步的。这意味着您传递给
db.clusters.find
的函数不会立即运行,而是在异步调用从 mongo 返回时运行。不要从
retrieveVertById
返回值,而是尝试使用回调函数:
function retrieveVertById(id, successCallback) {
db.clusters.find({
id: id
}, function (err, clusters) {
if (err || !clusters) {
console.log("No cluster found");
} else {
var result = [];
clusters.forEach(function (cluster) {
vert = cluster["vertices"];
result.push(vert);
});
successCallback(result);
}
});
};
retrieveVertById("001", function(result) {
console.log(result);
});
ljfranklin
2013-04-27
哦,我明白了...您应该记住,javascript 是异步语言
return result;
after forEach() 将不会从 forEach() 内部返回结果。您应该在解析最后一个值后发送结果。
var i = 0;
clusters.forEach( function (cluster) {
vert = cluster["vertices"];
result.push(vert);
if (i >= clusters.length)
return result;
i++;
});
monkeyinsight
2013-04-27