Я делал простую вещь, чтобы прочитать файл CSV и загрузить его в базу данных. Ниже приведены шаги, которые я выполняю:
- Прочитать имя таблицы из консоли.
- Проверить, существует ли таблица в базе данных
- Если не выходит, создайте таблицу.
- Прочитать расположение CSV-файла с консоли.
- Прочитать и загрузить данные в db.
Для описанного выше процесса я создал класс ConsoleInputReader. Я хочу, чтобы этот код считывал имя таблицы от пользователя, а затем проверял, существует ли таблица, а затем считывал расположение файла CSV и возвращал его.
Я ранее написал код чтения консоли в виде адского обратного вызова. Следующим шагом я хотел улучшить поток, поэтому попытался использовать обещание. Но почему-то это не работает для меня, и пользовательский ввод не запрашивается в том порядке, в котором я хочу. Я знаю, что есть выход из многих библиотек для чтения пользовательского ввода, но я новичок хочу добиться этого с помощью обещания.
Ниже мой код, пожалуйста, помогите мне:
var readConfig = require('fs');
class ConsoleInputReader {
constructor(configs,db){
this.questions = configs.questions;
this.db = db;
this.inputStream = process.stdin;
this.inputStream.setEncoding('UTF-8');
}
readTableName(){
let tableNameQ = this.questions['tableName'];
console.log(tableNameQ);
return new Promise((resolve,reject) =>{
this.inputStream.on('data',(tableName)=>{
if(tableName)
resolve(tableName);
})
});
}
readTableChecks(tableName,db){
return new Promise((resolve,reject) =>{
let tableChecksQ = this.questions['tableChecks'];
console.log(tableChecksQ);
this.inputStream.on('data',(tableChecks) =>{
console.log("sasas",tableName)
resolve(tableName);
})
});
}
readCSVLocation(tableName,csvLocationQ){
//let csvLocationQ = this.questions['csvLocation'];
console.log(csvLocationQ);
return new Promise((resolve,reject) =>{
this.inputStream.on('data',(csvLocation)=>{
if(csvLocation)
resolve({name:tableName,location:csvLocation})
})
});
}
readInput(){
return new Promise((resolve,reject) =>{
this.readTableName()
.then((tableName) => {this.readTableChecks(tableName,this.db)})
//.then((tableName) => {this.readCSVLocation(tableName,this.questions['csvLocation'])})
.then((csvInfo) => {resolve(csvInfo)});
});
}
}
module.exports = ConsoleInputReader````