[英]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.