簡體   English   中英

如何停止我的代碼異步運行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM