Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript node.js从sql查询中设置一个变量来计算表中的行数_Javascript_Sql_Variables - Fatal编程技术网

javascript node.js从sql查询中设置一个变量来计算表中的行数

javascript node.js从sql查询中设置一个变量来计算表中的行数,javascript,sql,variables,Javascript,Sql,Variables,我在node.js javascript程序中有一个(postgres sql)表。我只想确定其中有多少行,并将该值赋给一个变量(n),该变量可以在代码进行时使用 编辑-根据要求,我现在包含了更多的补充代码,并且我尝试使用提供的第一个答案 db_connnection.query(display_query).then(result => { io.to(roomId).emit('room-display-update', result.rows); //

我在node.js javascript程序中有一个(postgres sql)表。我只想确定其中有多少行,并将该值赋给一个变量(n),该变量可以在代码进行时使用

编辑-根据要求,我现在包含了更多的补充代码,并且我尝试使用提供的第一个答案

db_connnection.query(display_query).then(result => {
        io.to(roomId).emit('room-display-update', result.rows);
        // console.log(result.rows); 
      
       const queryFunction = async (db_connnection) => {
            var n = await db_connnection.query("SELECT COUNT(*) as total FROM waypoint", function(err,Result) {
                   return parseInt(Result.total);
            });
            console.log("There are", n, "inside queryfunction"); // this is never called?
            return n
        };
        
        var nn = queryFunction(db_connnection);
        console.log("There are", nn, "outside queryfunction"); // returns the follwoing
        // There are Promise {<rejected> TypeError: Cannot read property 'query' of undefined at queryFunction (/app/server.js:49:42) ...

数据库调用是异步的,您试图在数据库返回值之前记录该值。将调用转换为async/Wait或promise/resolve语句

const queryFunction = async (db_connection) => {
      var n = await db_connnection.query("SELECT COUNT(*) as total FROM maintable", function(err,Result) {
                return parseInt(Result.total);
        });
        console.log("Print", n);
        return n
};

这看起来像是一个同步/异步问题。如果您放入
console.log(“打印”,Result.total),控制台日志中会显示什么内容
before
返回parseInt(Result.total)?此代码编辑与您原来的帖子有很大不同,我只能推测您的sql包代码以及您没有发布的缺失代码。您可以尝试以下操作::var display_query=“选择COUNT(*)作为来自航路点“db_connection.query(display_query)的总计。然后(async(result)=>{var ioResult=wait io.to(roomId)。emit('room-display-update',result.rows)返回parseInt(ioResult.total);})这就是试图在本节之外呈现代码的缺点,这让我很难过。显示(U)查询和发出房间显示更新功能已启用,并将继续正常工作。没必要去摆弄那一点。下面的“SELECT COUNT(*)代码仍然不能进行简单的行计数。我曾尝试在queryfunction方法中使用async和Wait来应用建议的答案,但它始终无法在任何地方将行数放入变量中,更不用说在可用的地方了。好吧,我还需要学习另一件奇怪的事情。在本例中,是否有方法使变量n在const queryfunction位之外可用?类似于:`const queryFunction=async(db_connection)=>{var n=await db_connection.query(“从maintable中选择COUNT(*)作为总计”),函数(err,Result){return parseInt(Result.total);};控制台日志(“打印”,n)`@p当然可以,我刚刚更新了示例以包含一个return语句。请记住,函数链必须保持异步。如果解决了您的问题,请接受答案。请注意,此处提供的代码没有成功地将任何内容打印到控制台(没有错误,没有任何内容)。并且变量n不会被填充/创建以供以后使用。因此,从本质上讲,这段代码不起作用:-(@pptime)您调用了函数吗?必须使用queryFunction(db_connection)ReferenceError调用它。错误:n未定义
const queryFunction = async (db_connection) => {
      var n = await db_connnection.query("SELECT COUNT(*) as total FROM maintable", function(err,Result) {
                return parseInt(Result.total);
        });
        console.log("Print", n);
        return n
};