在couchdb函数之外调用变量?

时间:2012-04-17 12:38:39

标签: node.js couchdb nowjs-sockets cradle

我很难让couchdb的响应处理程序对node.js和now.js做任何有用的事情。我的目的是回复客户或团体,其中包含已找到并且也从客户发送的某些信息。

everyone.now.login = function(){
var username = this.now.lusername;
var password = this.now.lpassword;
var test;
db.get(this.now.lusername, function (err, doc, test, username) {
    if (err) {
        console.log(+ username + " doesn't exist!");

    } else  {
        console.log('Found user!');
        console.log(doc);
        test = 1;
   }
    });
    console.log(test);
}

我在这里以测试为例。我在db.get之外声明它,在里面分配一个值来反馈,但是当在外面运行console.log时它没有值。

我只是没有得到它或者出了什么问题?

(我确实发布了我可以使用doc。(无论什么价值)但是有一个特殊的变量我希望在此次调用之外传递回客户端)

1 个答案:

答案 0 :(得分:2)

test变量在console.log中没有值,因为CouchDB响应尚未到达。您的登录功能执行以下步骤。

  1. 设置一些变量(usernamepasswordtest未定义)
  2. 开始对CouchDB提取(对于this.now.lusername),并指定在完成时运行的功能
  3. 运行仍未定义的console.log(test)
  4. CouchDB响应完成,第2步中的功能运行
  5. 我为这样的事情做的是使用函数调用。

    everyone.now.login = function(){
      var username = this.now.lusername;
      var password = this.now.lpassword;
    
      db.get(this.now.lusername, function (err, doc, test, username) {
        if (err) {
            console.log(+ username + " doesn't exist!");
    
        } else  {
            console.log('Found user!');
            console.log(doc);
            login_complete(doc);
       }
      });
    
      function login_complete(doc) {
        console.log('The login finished! Doc is ' + doc)
      }
    }
    

    这样代码仍然看起来正确(代码的“故事”主要从上到下流动),但它也正确执行({{1函数仅在登录实际完成后运行。)