问题 /W合并文件和线上的下一个函数将将该文件作为参数



我当前在两个函数中遇到一些问题,这些功能无法执行我想要的方式。

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()的基础。但是,在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) {
   }

是否有人有关于如何思考的提示,以便文件在下一个功能启动之前合并?

如果您使用的是https://www.npmjs.com/package/concat软件包到CONCAT文件,则返回承诺。

因此,您可以做到这一点:

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

这样,您的功能将回报您可以等待您的方式的承诺。

您正在呼叫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是什么,但如果此函数是异步的,那么您需要做的就是返回contat函数,以便等待它。

最新更新