簡體   English   中英

node.js從循環中的find集合返回數據

[英]node.js return data from find collection in loop

我正在嘗試從此函數返回數據。 Console.log(documents)成功在控制台中顯示數據。 但這僅在功能體內起作用。 我無法將此數據返回到模板。 我該怎么辦? 我應該為node.js使用一些異步程序包,還是可以這樣實現?

謝謝。

var projects = req.user.projects;
var docs = [];

db.collection('documents', function(err, collection) {
    for (i = 0; i < projects.length; i++) { 
        collection.find({'_projectDn': projects[i].dn},function(err, cursor) {
            cursor.each(function(err, documents) {
                if(documents != null){
                    console.log(documents);
                    //or docs += documents;
                }
            });
        });
    }
});

console.log(documents); // undefined

res.render('projects.handlebars', {
    user : req.user,
    documents: docs
});

這些數據庫函數是異步的,這意味着當您嘗試對其進行記錄時,該函數尚未完成。 您可以使用回調記錄它,例如:

function getDocuments(callback) {
        db.collection('documents', function(err, collection) {
            for (i = 0; i < projects.length; i++) {
                collection.find({
                    '_projectDn': projects[i].dn
                }, function(err, cursor) {
                    cursor.each(function(err, documents) {
                        if (documents !== null) {
                            console.log(documents);
                            callback(documents);// run the function given in the callback argument
                        }
                    });
                });
            }
        });
    }
//use the function passing another function as argument
getDocuments(function(documents) {
    console.log('Documents: ' + documents);
});

暫無
暫無

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

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