我有以下代码:
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内部更改成功值?
答案 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);
}
);
的更多信息
此外,如果您正在使用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();
}
);
的更多信息