【发布时间】:2019-05-18 23:13:04
【问题描述】:
不知何故,我无法解决这个问题。
下面的函数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');
});
// });
});
}
我在这里错过了什么?
【问题讨论】:
标签: javascript node.js file promise async-await