![](/img/trans.png)
[英]How can I stop VS Code from suggesting I import code from my transpiled files?
[英]How can i stop my code from running asynchronously?
所以我需要以某種方式使我的“ readDataBase”函數中的for循環在verifyDataInFile執行之前完成。 我正在寫節點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");
}
})
}
您在這里遇到了一些困難的事情,但是真正的困難是當以循環方式寫入流時,很難知道何時完成所有寫入。 可以直接從數據庫通過pipe()
傳送到文件,但是我面前沒有任何東西可以測試,因此我不會嘗試半途而廢,但是值得研究。
同時,您仍然可以利用MySQL庫在'result'事件中在寫入文件時返回流的功能。 好處是,當您聽到數據庫的“結束”事件時,您將知道自己已經完成,然后可以繼續進行驗證:
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直接流式傳輸到文件的示例: 在MySQL中使用帶有節點的流
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.