为什么我的“if”语句只对函数的第二个触发器起作用?

问题描述 投票:0回答:2
使用 Node JS、Electron 和 FS 模块,我在单独的 .js 文件中创建了一个函数,该函数作为脚本调用到我的 HTML 中,并从带有 onclick="ReadSerials()" 的按钮触发,但它总是需要按两次按钮以便在调用“ReadSerials”函数时正确触发 if 语句。每次按下第二个按钮时,它都会触发并完全按照我的预期进行。

“serialnumberinput”元素是一个文本框,用户可以在其中输入其产品的序列号,如果该函数可以在 .csv 文件中找到该序列号,它将返回在屏幕上将其输出为 HTML 的行。

function ReadSerials() { const fs = require("fs"); const { parse } = require("csv-parse"); var serialnumber = document.getElementById("serialnumberinput").value; fs.createReadStream("./SER5YEAR.csv") .pipe(parse({ delimiter: ",", from_line: 1 })) .on("data", function(row) { var inputbg = document.getElementById("serialnumberinput"); if (row.includes(serialnumber)) { console.log(row); var logger = document.getElementById('serialselect'); console.log = function() { logger.innerHTML += '<td class="serialresult">' + row[1] + '</td>'; logger.innerHTML += '<td class="serialresult">' + row[2] + '</td>'; logger.innerHTML += '<td class="serialresult">' + row[3] + '</td>'; logger.innerHTML += '<td class="serialresult">' + row[4] + '</td>'; logger.innerHTML += '<td class="serialresult">' + row[5] + '</td>'; logger.innerHTML += '<td class="serialresult">' + row[6] + '</td>'; document.getElementById("serialsubmit").style.visibility = "hidden"; inputbg.style.backgroundColor = "#63c63c33"; return; } } else { } }) }
我尝试简化函数,以便 if 语句仅执行样式更改,因为我认为 HTML 更改可能在创建读取流后很快触发,但它没有任何区别。我还尝试在读取流创建和函数的其余部分之间添加超时。

如果我将整个函数简化为基本的 if/else (不涉及文件、html 元素或数据输入),它确实会第一次触发,所以我知道这是我函数中某个地方的问题,我似乎无法弄清楚哪一部分.

这是我在 Electron/Node 中的第一个项目,总的来说,我对 JS 相当陌生,所以如果我遗漏了一些非常明显的东西,我很抱歉,但是我花了相当多的时间阅读有类似问题的帖子,但我找不到描述这个特定问题。

javascript node.js if-statement electron node.js-fs
2个回答
0
投票
这可能不是您问题的答案,但如果您想在控制台中获得表格输出,请尝试

console.table() 功能,然后将样式更改直接添加到 if 子句中。


0
投票
对于任何可能遇到类似问题的帖子的人 - @Teemu 的评论解决了这个问题。重复使用 console.log 导致了问题。就我而言,第二次使用 console.log 是不必要的,因此删除它解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.