[英]Make functions for operations in mongodb
我需要做一个这样的功能。
function getDataFromCollection(collectionName) {
let data;
MongoClient.connect(url, function(err, db) {
if (err) throw err;
db.collection(collectionName).find({}).toArray(function(err, result) {
data = result;
console.log(result);
db.close();
});
});
return data;
}
问题是数据是不确定的,但是当我执行console.log(result)时,它可以工作。 有什么办法可以帮助我。 提前致谢。
有一个非常简单的解释。 该function(err, result)
本质上是异步的,不会立即调用,而是在从mongo中获取数据后的一段时间。 因此,该function(err, result)
是一个回调。 因此,不是将data
设置为立即生成,而是需要一段时间。 现在,您立即返回数据,而不必等待数据被填充(在function(err, result)
回调内部),因此显然会返回undefined
。
解决方案是使用JavaScript的Promises
,它使您可以使用异步代码和回调。 我们从getDataFromCollection
返回一个Promise
并链接一个.then
当我们调用它时。 当在getDataFromCollection
函数中使用传递到resolve
函数的数据解析promise时,将执行传递给then
的函数或回调。 因此,里面的回调then
当您收到将被称为result
。
所有代码-
function getDataFromCollection(collectionName) {
return new Promise(function(resolve, reject) {
MongoClient.connect(url, function(err, db) {
if (err) {
reject(err);
return;
}
db.collection(collectionName).find({}).toArray(function(err, result) {
if (err) {
reject(err);
return;
}
console.log(result);
db.close();
resolve(result);
});
});
});
}
像这样消耗函数。
getDataFromCollection("collection")
.then(function(result) {
// use result
})
.catch(function(err) {
console.log(err);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.