从回调结果中填充var?

时间:2012-02-03 10:43:30

标签: javascript node.js

开始玩节点,但仍然很新。我有以下代码,是否可以从x中返回“结果”?

function dbRequest(sql) {
    var x;
    var dbResults = client.query(sql, function (err,results,fields) {
        if (err) {
            throw err;
        }
        x = results;
        client.end(); 
    });
    // I want x here to return what is in results.
    return x;
}

1 个答案:

答案 0 :(得分:1)

没有。至少不是你尝试过的方式。

最有可能的是,调用client.query()将启动节点的异步请求。这反过来意味着代码执行将立即继续,因此,在回调填充之前,它将返回x的值。

处理这类内容的一种非常方便的方法是,传递另一个你需要自己定义的回调方法(如果你想用结果做某些事情)

例如:

function dbRequest(sql, cb) {
    var dbResults = client.query(sql,function(err,results,fields) {
               if (err) {
                   throw err;
               }
                    if (typeof cb === 'function') {
                       cb(results);
                    }

                    client.end(); 
           });
}

然后将其称为

dbRequest('select * from foo', function(data) {
    // do something with data
});