【发布时间】:2017-10-10 17:47:27
【问题描述】:
所以我需要在执行 verifyDataInFile 之前以某种方式使我的“readDataBase”函数中的 for 循环完成。我正在用节点 js 编写并从 MySQL 数据库中获取数据。 我对任何提供任何“睡眠”功能的包都没有任何运气,setTimeOut 也不起作用,回调对我来说毫无意义。
任何帮助将不胜感激。
'use strict';
var mysql = require('mysql');
var fs = require('fs');
var wstream = fs.createWriteStream('Desktop\myOutput.txt');.
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "1234"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected!");
readDataBase();
verifyDataInFile();
});
var readDataBase = function ()
{
con.query("SELECT * FROM demo.users", function (err, rows, fields)
{
if (err) {
return;
} else {
for (var i = 0; i < rows.length; i++)
{
wstream.write(rows[i].id + " " + rows[i].firstName + " " + rows[i].lastName + " " + rows[i].email + "\n" + "\n");
}
}
});
}
var verifyDataInFile = function ()
{
fs.readFile('Desktop\myOutput.txt', function (err, fs) {
if (err) throw err;
if (fs.indexOf('ut.cursus.luctus@utipsumac.org') >= 0) {
console.log("something is here");
} else {
console.log("nope");
}
})
}
【问题讨论】:
-
一个愚蠢的想法,但在最坏的情况下,在 readdatabase 函数的末尾调用 verifydatainfile。
-
没有帮助:/同样的问题。我需要在 for 循环以某种方式执行时停止程序运行。
-
我知道 js 处理这些东西会很棘手。我从来没有像以往一样找到一个可靠的解决方案。但是这里有另一个愚蠢的想法,将全局布尔值设为真,当它为真时什么都不做,然后当你的读取完成时,让它为假,绕过已经运行的 while。
-
不要这样做,而是学习如何进行正确的异步编程。您应该做的不是学习如何绕过它,而是学习如何在保持异步的同时执行顺序步骤。正确使用回调是朝着这个方向迈出的第一步。
-
如果你不喜欢这个答案,你能做的最好的事情就是使用不是这样设计的语言。这就是 node.js 中的程序应该如何工作的字面意思。
标签: javascript mysql node.js