Правильный способ дождаться события перед возвращением - PullRequest
0 голосов
/ 05 августа 2020

Я использую модуль csv-parser npm для чтения файла csv, его обработки, а затем создания статистической модели на основе данных. Проблема, с которой я столкнулся, заключается в том, что другой файл, который использует это, не ждет, пока модель завершит sh, прежде чем двигаться дальше, поэтому он пытается использовать значения / методы, которые еще не определены. Основываясь на других сообщениях, это то, что у меня есть:

   this.read = async function(){
        
        return new Promise((resolve, reject) => {
        
        console.log("in mv read");
        fs.createReadStream("./assets/stats-csv.csv")
            .pipe(csv({
                mapValues: ({ header, index, value }) => this.toNumber(header, value)
            }))
            .on('data', (data) => this.process(data))

            .on('error', err => {
                reject(err);
            })
            .on('end', () => {
               this.model();
               console.log('finished mv model');
               resolve(true);
               });
        })

    }

И затем другой файл использует метод следующим образом:

    this.train_mv = async function(){
        console.log("in train mv wrapper")
        const success = await this.mvReg.read();
        return success;
        //console.log(success);
    }

Я добавил бит «успех» только для посмотрите, поможет ли возврат и использование значения из обещания, но это не так. Функция просто переходит и даже не go до строки «return success». Мне что-то не хватает в async / await? Разве функция train_mv не должна останавливаться и ждать, пока обещание не разрешится? Буду признателен за любую помощь. Спасибо!

...