【问题标题】:Javascript not assign to variable [duplicate]Javascript未分配给变量[重复]
【发布时间】:2015-06-10 01:34:15
【问题描述】:

我正在用 Node.js 编写一个基本的用户创建系统,我想知道 createUser 函数的结果是什么。代码本身运行良好,新用户被发布,现有用户被停止。我想向最终用户展示这个,所以我设置了一个变量来返回一个代表结果的数值。

问题是,该值从未分配给。即使我的其他日志语句出现,最终的控制台日志总是读取未定义。我觉得这更像是一个 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;
};

【问题讨论】:

  • A同步。不相关,但我会回避使用数值来表示本质上是布尔值。

标签: javascript node.js postgresql


【解决方案1】:

这是由于您的查询是异步的 - 您的 createUser 方法应该做的是将回调作为参数,并调用 cb(err, wasUserCreated, user) 或在您的查询的回调中的某些内容。

你的 console.log 总是 undef,因为它是同步触发的

some basics in mixu's node book

【讨论】:

    【解决方案2】:

    pg.connect的第二个参数是一个回调函数,它是异步运行的……所以函数在wasUserCreated被修改之前返回

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 2020-11-22
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多