某种程度上,我无法理解这个问题。
下面的函数runOneCombination
将针对数千个文件执行,我想提取一些信息,做一些计算,然后将它们打印到一个我一直在添加内容的文件中。
我认为这个项目的其他代码并不需要,但如果需要的话,我可以分享它。
问题在下面的代码中指出。我期望在每次Promise.all(res.dailyData.map( async (dailyDataRow,index,arr) => {
迭代时,三个语句按顺序执行,并且fs.writeSync(out,'\r\n');
被执行。不幸的是,这不是发生的事情。输出包含所有writeDaily(out,dailyDataRow)
的输出,附加在一起而没有换行符,但后面跟着一个。然后是featureRow[0]
中包含的所有内容(用换行符分隔),接着是featureRow[1]
和featureRow[2]
中的内容(再次没有换行符)。
我的期望是:
dailyDataRow,featureRow[0],featureRow[1],featureRow[2],\r\n
之前这个功能是可以正常工作的,但是没有追加到文件中,因此我只能处理一对文件作为输入。
function runOneCombination(dailyFile,simFile) {
return new Promise(async function(resolve, reject) {
let res = await process(dailyFile,simFile);
var wh = true;
if(await fs.existsSync(outFilePath))
wh = false;
var out = fs.openSync(outFilePath,'a');
// out.once('open', async function(fd) {
//Write Headers
if(wh) {
await writeHeaders(out);
}
await Promise.all(res.dailyData.map( async (dailyDataRow,index,arr) => {
if(index > 1) {
let samples = await getFeatures(dailyDataRow,res.cdData);
await samples.forEach(async (featureRow)=>{
//console.log(dailyDataRow,featureRow[0],featureRow[1],featureRow[2]);
if(!featureRow)
console.log("fail:",featureRow);
else {
//Problem is in the following lines:
writeDaily(out,dailyDataRow).then(async(val)=>{
writeFeatures(out,featureRow[0]).then(async(val)=>{
writeFeatures(out,featureRow[1]).then(async(val)=>{
writeFeatures(out,featureRow[2]);
});
});
});
}
});
fs.writeSync(out,'\r\n');
}
})).then((val)=>{
//out.end(); //close the writing stream
resolve('success');
});
// });
});
}
这里我漏掉了什么?