运行与单步执行时alasql行为不同

当下面的代码无中断运行时,最终的setOption()调用导致表被枚举,就好像执行了TRUNCATE TABLE一样。如果使用调试器(在我的例子中为“勇敢者”)逐步完成,则行为符合预期。我猜这是某种竞赛情况,但我不清楚如何解决。我尝试查看文档,但它们仍然很粗略。任何帮助表示赞赏。

<!DOCTYPE HTML>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/alasql@0.4"></script>
    <script>

        "use strict"
        function setOption(prop,value){
            let sql = "SELECT count(id) as numrecs FROM dbOptions WHERE app = 'list_' AND property = '" + prop + "'";
            let info = alasql(sql);
            if(info[0].numrecs === 0) {
                sql = "INSERT INTO `dbOptions` (`app`,`property`,`propertyValue`) VALUES('list_','" + prop + "','" + value+"')";
                alasql(sql);
            } else {
                sql = "UPDATE `dbOptions` SET `propertyValue` = '" + value + "' WHERE `app` = 'list_' and `property` = '" + prop + "'";
                alasql(sql);
            }
            alasql("COMMIT TRANSactION");
        }

        function getOptions() { //get all options
            return alasql("SELECT `property`,`propertyValue` FROM `dbOptions`");
        }

        alasql("CREATE localStorage DATABASE IF NOT EXISTS listdb");
        alasql("ATTACH localStorage DATABASE listdb");
        alasql("USE listdb");
        alasql("CREATE TABLE IF NOT EXISTS `dbOptions` (`id` int PRIMARY KEY,`app` char(255),`property` char(255),`propertyValue` char(255))");
        alasql("TRUNCATE TABLE `dbOptions`");

        console.log("INSERT: A = FIRST VALUE");
        setOption("A","FIRST VALUE");
        console.log(JSON.stringify(getOptions(),null,4))
        console.log("INSERT: B = SECOND VALUE");
        setOption("B","SECOND VALUE");
        console.log(JSON.stringify(getOptions(),4))
        console.log("REPLACE: 'A = REPLACEMENT VALUE");
        setOption("A","REPLACEMENT VALUE");
        console.log(JSON.stringify(getOptions(),4))
    </script>
</head>
<body>
Hello
</body>
</html>
z80235578 回答:运行与单步执行时alasql行为不同

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2882353.html

大家都在问