Проблемы при создании модуля для чтения пользовательского ввода с консоли - PullRequest
0 голосов
/ 06 мая 2020

Я делал простую вещь, чтобы прочитать файл CSV и загрузить его в базу данных. Ниже приведены шаги, которые я выполняю:

  1. Прочитать имя таблицы из консоли.
  2. Проверить, существует ли таблица в базе данных
  3. Если не выходит, создайте таблицу.
  4. Прочитать расположение CSV-файла с консоли.
  5. Прочитать и загрузить данные в 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````
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...