Nodejs 快速 csv 和承诺

问题描述

我觉得这里的事情有点乱。我想建立到 mySQL 数据库的连接。然后我想读入一个文件。我想逐行获取名称并运行查询。我会假设我的 sqlSelectQuery 函数返回一个承诺,在移动到下一行之前会等待承诺解决。我在这里错过了什么?

const mysql = require('mysql');
const fs = require('fs');
const path = require('path');
const csv = require('fast-csv');
const config = require('./config')

const connection = mysql.createConnection({
    user: config.user,password: config.password,database: config.database,host: config.host
});

connection.connect((err) => {
    if(err){
      console.log('Error connecting to Db');
      return;
    }
    console.log('Connection established');
  });

fs.createReadStream(path.resolve(__dirname,'data.csv'))
    .pipe(csv.parse({ headers: true }))
    .on('error',error => console.error("error",error))
    .on('data',row => { // need to get this to block
        sqlSelectQuery(row).then(result => console.log("result: ",result))
    })
    .on('end',rowCount => console.log(`Parsed ${rowCount} rows`));




const sqlSelectQuery = (row) => {
    return new Promise((resolve,reject) => {
        console.log("inside promise");
        const selectQuery = 'SELECT * FROM loans where business_name = ?;';
        connection.query(selectQuery,[row.BorrowerName],(err,rows) => {
            let result = {};
            if(err) reject(err);
            if (rows.length === 1){
                let res = rows[0];
                result = {
                    business_name: res.business_name,loan_range: res.loan_range,loan_amount: row.InitialApprovalAmount,count: 1
                };
                resolve(result);
            } else {
                result = {
                    business_name: row.BorrowerName,loan_range: "",loan_amount: "",unique: rows.length
                };
                resolve(result);
            }
        });
    })
}

my console looks like this
inside promise
inside promise  //20 times (I have 20 rows)
Parsed 20 rows
Connection established
result:  {....}
result: {...}....

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)