2

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

我只是不明白还是有什么问题?

(我确实发布了我可以使用文档。(无论值)但有一个特定的变量我想在此调用之外传递回客户端)

4

1 回答 1

2

由于 CouchDB 响应尚未到达,因此该test变量将没有值。console.log您的登录函数执行以下步骤。

  1. 设置一些变量(username, password, 和test未定义)
  2. 开始一个 CouchDB fetch (for 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()(该函数仅在登录实际完成后才运行)。

于 2012-04-17T20:00:48.633 回答