Node.js布尔变量不改变值

时间:2017-10-01 06:47:52

标签: javascript node.js express boolean

我有以下代码:

app.post('/', function (req, res)
    {
        /*
        connection is created with mysql
         */
        var success = true
        connection.query(sql, [values], function (err, result)
        {
            success = false
        })
        connection.end()
        console.log(success)
    }
)

此输出为true。如何从connection.query内部更改成功值?

2 个答案:

答案 0 :(得分:0)

这是异步程序,您的console.log()语句在connection.query回调函数之前执行。成功的价值正在功能中被改变。

您可以通过以下方式测试:

app.post('/', function (req, res) {
    var success = true;
    connection.query(sql, [values], function (err, result){
       success = false;
       console.log(success);
       // more code goes here
    });
    connection.end();
});

如果你想编写模式代码,那么它将进入回调函数,其中存在注释。

欢迎使用Node.js;)

答案 1 :(得分:0)

虽然重新定义success success = false;的代码块是"然后是"在行号方面console.log(result)。它实际上发生在。 使用一个函数调用connection.query(),该函数将在查询完成后稍后调用。

至少有3种不同的方法可以解决这个问题。

回调样式 这只是简单地将您想要执行的代码包装在conn.query匿名函数中,如此

app.post('/', function (req, res)
    {
        /*
        connection is created with mysql
        */
        var success = true;
        var callback = function(result) {
            success = result;
            console.log(success);
            connection.end()
        };

        connection.query(sql, [values], function (err, result)
        {
            callback(result);
        });
    }
);

承诺风格 如果conn.query()返回一个promise,那么你可以这样做:

app.post('/', function (req, res)
    {
        /*
        connection is created with mysql
        */
        var success = true;
        var callback = function(result) {
            success = result;
            console.log(success);
            connection.end()
        };

        connection.query(sql, [values]).then(callback);
    }
);

Promises

的更多信息

此外,如果您正在使用mysql驱动程序作为节点,您还可以使用promise-mysql来使用promises。

等待风格,对于那些不习惯于事件驱动编程的人来说,操作更直观。假设您的conn.query()支持Promises,您可以使用await,它看起来像这样:

app.post('/', function (req, res)
    {
        /*
        connection is created with mysql
        */
        var success = true;
        await connection.query(sql, [values], (result) => success = false);
        console.log(success);
        connection.end();
    }
);

await

的更多信息
相关问题