Каким-то образом я не могу обернуть голову вокруг этой проблемы.
Функция 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');
});
// });
});
}
Чего мне здесь не хватает?