我是JavaScript的新手,我只知道Java和C。
我目前正在为我自己的Discord Server编写一个机器人,我有一个很大的问题:
凭借我的Java知识,我认为这段代码将会工作:
function eintraegeVon(authorID) {
var sql = "SELECT * FROM user WHERE discord_id = ?";
var query = con.query(sql, authorID, function (err, result) {
if (err) {
throw err;
return -1;
}
return result.length;
});
console.log("Test if this is reached in the program");
}
我认为永远不会到达console.log("Test...")
这一行,因为在这一行之前,查询序列中的一个返回命令->函数已经完成。或者,如果它存在错误,它将在错误之前执行,返回值为-1。
当我添加一些用于调试的控制台写命令时,我看到的第一个命令是"test...“命令,然后继续调用函数"eintraegeVon
“的函数的其余部分,并在最后完成"return result.length"-command。
为何会这样呢?
我读到了一些关于它的东西,node.js可以是异步的,但是为什么这个函数不像Java那样在每个命令后一个命令地处理呢?
发布于 2018-07-13 19:00:50
正如您所说,node是异步的,并且是“测试...”日志在您从数据库获取答案之前执行。您在查询中传入的函数将在您从数据库中获得答案后执行。
发布于 2018-07-13 19:07:31
查询函数异步执行,然后继续执行,这就是消息get首先打印出来的原因。您应该熟悉javacript和node.js的这一方面,因为您将在任何地方遇到它。查看本教程:Understanding Async Programming in Node.js还可以查看处理异步代码的最新方法:Callbacks, Promises and Async/Await
发布于 2018-07-13 19:12:19
Node.js是异步的,它是非阻塞的,这意味着它不会等待函数结束,它会跳到下一行或下一个函数。但之前的函数调用在结束时也会返回。通过使用回调函数,可以实现顺序执行。
https://stackoverflow.com/questions/51323545
复制相似问题