gpt4 book ai didi

javascript - 如何阻止我的代码异步运行?

转载 作者:行者123 更新时间:2023-11-29 18:19:55 24 4
gpt4 key购买 nike

所以我需要以某种方式使“readDataBase”函数中的 for 循环在 verifyDataInFile 执行之前完成。我正在用 Node.js 编写并从 MySQL 数据库获取数据。我没有找到任何提供任何类型“ sleep ”功能的软件包,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");
}
})
}

最佳答案

这里发生了一些困难的事情,但真正的困难是当循环写入流时,很难知道所有写入何时完成。有可能pipe()直接从数据库到文件,但我面前没有任何东西可以测试,所以我不会尝试半生不熟的尝试,但它值得研究。

同时,您仍然可以利用 MySQL 库的功能,在“结果”事件时将写入流返回到您的文件。这样做的好处是,当你听到数据库的“结束”事件时,你就会知道你已经完成了,然后可以继续进行验证:

var query = con.query("SELECT * FROM demo.users")

query.on('error', function(err) {
// Handle error, an 'end' event will be emitted after this as well
})

query.on('result', function(row){
connection.pause();
// pause so the db waits for the write to finish
wstream.write(rows[i].id + " ...etc", function(){
// write has finished…on to the next row
connection.resume();
});
})

query.on('end', function() {
verifyDataInFile();
});

这里有更多关于 MySQL 流 api 的信息:https://github.com/mysqljs/mysql#streaming-query-rows

这是一个不同的答案,其中包含借助 csv-transform 直接流式传输到文件的示例:Using Streams in MySQL with Node

关于javascript - 如何阻止我的代码异步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46672870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com