簡體   English   中英

在Mongoose之外的函數中返回數據

[英]Returning data in function outside Mongoose

我正在編寫一個函數,並且希望能夠返回我的Mongoose查詢數據,因此可以使用它。 但是,我只能在.exec函數中訪問sum。 我如何在外部獲取它,以便在調用函數時將其返回?

function get_likes(user){
    var Image = require('./models/image');

    var query = Image.find({'author' : user});
    query.exec(function (err, collected) {
        if (err) return console.error(err);

        var sum = 0;
        for(var i=0;i<collected.length-1;i++){
            sum += collected[i].like_count;
        }

        // I CAN PRINT SUM HERE
        console.log(sum);
        return sum;
    });

    // SUM DOESN'T EXIST OUT HERE.
    return sum;
}

你不能直接。 node.js使用回調和事件來處理其異步操作。 最好的選擇就是擁抱它。

您可以通過采用一個Promise庫( http://howtonode.org/promises )間接地做到這一點,但這僅是偽造的同步操作。

使用回調函數進行響應

function get_likes(user, cb){
    var Image = require('./models/image')

    var query = Image.find({'author' : user});
    query.exec(function (err, collected) {
        if (err) return console.error(err);

      var sum = 0;
      for(var i=0;i<collected.length-1;i++){
            sum += collected[i].like_count;
        }

        // I CAN PRINT SUM HERE
        console.log(sum);
        cb(sum);
    });

}

或者,如果您將其用作api,則可以使用res.send({“ sum”:sum});

function get_likes(user, req, res){
        var Image = require('./models/image');

        var query = Image.find({'author' : user});
        query.exec(function (err, collected) {
            if (err) return res.status(400).send({"error":"unable to connect"});

          var sum=0;
          for(var i=0;i<collected.length-1;i++){
                sum += collected[i].like_count;
            }

            // I CAN PRINT SUM HERE
            console.log(sum);
            res.status(200).send({"sum": sum});
        });

    }

我將node / express作為示例服務器。

您的get_likes函數是異步的,因此應該有一個回調

function get_likes(user, callback){
var Image = require('./models/image');
var query = Image.find({'author' : user});
query.exec(function (err, collected) {
    if (err) return callback(err);

    var sum = 0;
    for(var i=0;i<collected.length-1;i++){
        sum += collected[i].like_count;
    }

    // I CAN PRINT SUM HERE
    console.log(sum);
    callback(null, sum);
});
}

暫無
暫無

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

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