2015-06-09 109 views
0

我在Node.js中编写了一个基本的用户创建系统,我想了解createUser函数的结果。代码本身工作正常,发布新用户,现有用户被停止。我想向最终用户展示这一点,所以我设置了一个变量来返回表示结果的数值。Javascript未分配给变量

问题是,该值永远不会分配给。即使我的其他日志语句出现,最终的控制台日志也总是读取未定义的。我觉得这更像是一个JavaScript语法问题,但我很难过。

User.prototype.createUser = function() { 
    console.log('Begin createUser...'); 
    var email = this.email; 
    var wasUserCreated; <------- variable to assign 
    pg.connect(process.env.DATABASE_URL, function (err, client) { 
     if (err) { 
      console.log(err.message, err.stack); 
      wasUserCreated = 0; <------assigning to variable? 
     } 
     else { 
      var query = client.query('SELECT email FROM users WHERE email=$1', [email], 
      function (err, results) { 
       if (results.rows.length > 0) { 
        console.log('That email address has already been registered!'); 
        wasUserCreated = 1; <------assigning to variable? 

       } 
       else { 
        console.log('Email address not found, inserting new account'); 
        insertNewUser(); 
        wasUserCreated = 2; <------assigning to variable? 

       } 
      }); 
     } 
    }); 
    console.log("wasUserCreated: " + wasUserCreated); <------always reads 'undefined' 

    return wasUserCreated; 
}; 
+1

** A **同步。不相关的,但我会回避使用数值来实现本质上的布尔值。 –

回答

0

这是由于您的查询是异步的, - 你的方法的createUser应该做的是采取一个回调作为参数,并调用CB(ERR,wasUserCreated,用户)或回调到您的查询里面的东西。

你的console.log始终是联合国民主基金,因为它触发同步

some basics in mixu's node book

0

pg.connect的第二个参数是一个回调函数,该函数异步运行......所以之前的函数返回wasUserCreated is modified