Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 如何仅在查询完成后运行代码?_Javascript_Mysql_Node.js_If Statement - Fatal编程技术网

Javascript 如何仅在查询完成后运行代码?

Javascript 如何仅在查询完成后运行代码?,javascript,mysql,node.js,if-statement,Javascript,Mysql,Node.js,If Statement,我有以下代码: var userFound = false; let sql = `SELECT box_id, cubby_id, comport, deliveredToUser FROM recipients WHERE package_password = ?`; connection.query(sql, [req.session.sessionUserPackagePassword], funct

我有以下代码:

var userFound = false;
let sql = `SELECT box_id, cubby_id, comport, deliveredToUser
           FROM recipients
           WHERE package_password = ?`;
connection.query(sql, [req.session.sessionUserPackagePassword],
                      function(err, rows, fields) {
    if (!err) {
        for (var i = 0; i < rows.length; i++) {
            // Make the comparaison case insensitive
            if ((rows[i].deliveredToUser).toLowerCase() == `no`) {
                userFound = true;
                console.log(userFound);
                var comport = rows[i].comport;
                var command = "open" + rows[i].cubby_id;
                var commandClose = "close" + rows[i].cubby_id;
                var commandStatus = "status" + rows[i].cubby_id;
                console.log(command);
                console.log(comport);
                var options = {
                    scriptPath: 'python/scripts',
                    // pass arguments to the script here    
                    args: [command, comport, commandClose, commandStatus] 
                };
                PythonShell.run('controlLock.py', options, function(err, results) {
                    if (err) {
                        res.render('errorConnection', {});
                    }
                    console.log('results: %j', results);
                });
            }
        }
        console.log(userFound);
        // If the query fails to execute
    } else {
        console.log('Error while performing Query.');
        res.render('errorConnection', {});
    }
});
connection.end();
if (!userFound) {
    //
    res.render('pickup/errorAlreadyDelivered', {});
    connection.end();
}

我在查询外部和底部放置了一个
console.log
,尽管查询值更改为
true
,但它首先打印出
false
,并首先显示出来,因为
console.log
没有等到查询完成后才能存储值。

是的,但我需要if(!userFound)语句是外部的,因为下面有代码,我想运行一个else语句来运行下面的代码,如果不满足该条件,则必须将其放入回调函数中,包括“下面的代码”。或者,创建另一个包含“下面的代码”的函数,并从查询回调中调用它。一旦异步获得结果,就需要继续异步处理。你不能期望它神奇地同步可用。但是,如何获取函数内部的值并用函数外部的值替换它呢。依赖于asunc结果的所有内容都必须异步执行。是的,但我需要if(!userFound)语句位于外部,因为下面有代码,如果不满足该条件,我希望运行else语句来运行下面的代码。您必须将其放入回调函数中,包括“下面的代码”。或者,创建另一个包含“下面的代码”的函数,并从查询回调中调用它。一旦异步获得结果,就需要继续异步处理。你不能期望它神奇地同步可用。但是,如何获取函数内部的值并用函数外部的值替换它呢。所有依赖于asunc结果的操作都必须异步执行。
if (!userFound) {
    //
    res.render('pickup/errorAlreadyDelivered', {});
    connection.end();
}
console.log("connection ended " + userFound);