我当前在两个函数中遇到一些问题,这些功能无法执行我想要的方式。
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函数,以便等待它。