簡體   English   中英

使函數在mongodb中運行

[英]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);
   });

這里閱讀有關Promises信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM