файл слияния проблем / w и следующая функция в строке будут иметь этот файл в качестве параметра - PullRequest
0 голосов
/ 07 марта 2019

У меня сейчас какая-то проблема с двумя функциями, которые не выполняются так, как я хотел.

app.post('/', async (req, res) => {

    // This function will take pcs.txt and pcequp.txt and make pcs_pcequip.txt
    await filefunction.mergeFiles('./../server/data/text1.txt','./../server/data/text2.txt',"./data/text3.txt"); 

    // Parse the data file text3.txt into JSON.
    await JSONParser.StartJSONParser();
}

mergeFiles возьмет два файла и объединит их в один файл. Этот файл является основой для StartJSONParser (). Но мне не удается завершить mergeFiles до запуска StartJSONParser.

функция mergeFiles

    static mergeFiles(file1,file2, destination){
    concat([file1,file2], destination, function(err) {
        if(err) throw err
    });
}

StartJSONParser

   static StartJSONParser() {
    this.readFile("./data/text3.txt", "./data/text3.json", new RegExp("[^\\n\\r\\t ]+", 'g'));

   }

   static readFile(inData, outData, regex) {

   }

Есть ли кто-нибудь, у кого есть советы о том, как следует объединить файлы до запуска следующей функции ??

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Если вы используете пакет https://www.npmjs.com/package/concat для объединения файлов, он возвращает обещание.

ТАК, скорее вы можете просто сделать это:

static mergeFiles(file1,file2, destination){
    return concat([file1,file2], destination);
}

Таким образом, ваша функция будетвернуть обещание, что вы можете ждать, как вы делаете.

1 голос
/ 07 марта 2019

Вы звоните в ожидании на mergeFiles, но это не обещание, поэтому оно не будет "ждать".

Вы можете попробовать изменить mergeFiles на что-то вроде этого:

static mergeFiles(file1,file2, destination){ 
  return new Promise((resolve) => {
    concat([file1,file2], destination, function(err) {
        if(err) throw err
        resolve();
    });
  })
}

Я думаю, что это должно работать, я создал этот пример кода, который работает, так что, возможно, вы можете использовать это, чтобы помочь вам

async function init() {
    function mergeFiles() {
        return new Promise((resolve) => {
            setTimeout(() => {
                console.log('mergeFiles');
                resolve();
            }, 5000);
        })
    }

    await mergeFiles();
    console.log('after')
}

Хотя это зависит от того, что такое concat,если эта функция асинхронная, то, вероятно, все, что вам нужно, это вернуть функцию concat, чтобы await работал с ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...