2012-04-17 48 views
2

我有很多麻烦得到couchdb的响应处理程序做任何有用的node.js和now.js。我的目标是回电给客户或小组,并提供某些信息,这些信息已经找到,并且也从客户端发送。在couchdb函数外调用变量?

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在外部运行时,它没有值。

我只是没有得到它或者是错的?

(我不释放我可以使用文档。(任何值),但我想回传给客户端这一呼吁之外的特定变量)

回答

2

test变量将不会有一个值console.log,因为CouchDB响应尚未到达。您的登录功能执行以下步骤。

  1. 设置一些变量(usernamepasswordtest是不确定的)
  2. 开始一个CouchDB的撷取(适用于this.now.lusername)与分配给运行一个函数当它完成
  3. 运行console.log(test)这仍然是不确定的
  4. CouchDB的响应完成,并从步骤你的函数2运行

我喜欢的事情做这是使用函数调用。

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) 
    } 
} 

这样的代码仍然看起来正确(以下简称“故事”的代码大多是从上往下流),但它也正确执行(该login_complete()函数运行后才能登录实际上是完成)。

+0

太好了,谢谢解释! – Verbium 2012-04-18 09:37:21