NodeJS / Javascript:从函数中访问变量

时间:2014-03-05 03:28:08

标签: javascript node.js

我正在尝试访问我的两个函数中的变量,但我没有回复任何东西。我做错了什么?我该如何解决?


所以这就是我的代码:

exports.show = function(req, res) {
    var next_id;
    var prev_id;
    Article.find({'created':{$gt:req.article.created}}).sort('-created').limit(1).exec(function(err, articles) {
        if (!err && articles[0] !== undefined) {
            next_id = articles[0].id; // trying to get this variable
        }

    });

    Article.find({'created':{$lt:req.article.created}}).sort('-created').limit(1).exec(function(err, articles) {
        if (!err && articles[0] !== undefined) {
            prev_id = articles[0].id; // and this variable
        }

    });

    res.jsonp({article : req.article, next_href : next_id, prev_href : prev_id});

};

1 个答案:

答案 0 :(得分:0)

我同意@thefourtheye。它可能是异步的。您可以使用异步库,例如 node-async promise 库。但在这种情况下,如果你想在没有库的情况下这样做,你只需要嵌套你的方法,以确保下一步只在上一步完成后执行。

exports.show = function(req, res) {
    var next_id;
    var prev_id;
    Article.find({'created':{$gt:req.article.created}}).sort('-created').limit(1).exec(function(err, articles) {
        if (!err && articles[0] !== undefined) {
            next_id = articles[0].id; // trying to get this variable
        }

        Article.find({'created':{$lt:req.article.created}}).sort('-created').limit(1).exec(function(err, articles) {
            if (!err && articles[0] !== undefined) {
                prev_id = articles[0].id; // and this variable
            }

            res.jsonp({article : req.article, next_href : next_id, prev_href : prev_id});
        });

    });

};

所以第1步是查找next_id。调用exec方法时(在异步请求之后),您可以继续执行步骤2,即查找prev_id。调用exec方法后,您就知道已完成并可以返回值res.jsonp(...)

异步库在这里很有用,因为这种方法会使事情迭代运行,这意味着第二个请求(prev_id)将在第一个请求(next_id)完成之后才会启动。您可以并行运行异步请求并等待两个请求完成,然后设置res.jsonp响应。 Here's a sample article using node-async