【发布时间】:2018-02-07 10:30:18
【问题描述】:
尝试在循环中写入文件时,我似乎遇到了问题,即使第一个文件尚未创建,循环仍在迭代(我想我要么不理解承诺,要么不理解脚本的异步性质)
所以我将在命令行上运行node write_file_script.js premier_league
// teams.js
module.exports = {
premier_league: [
{ team_name: "Team 1", friendly_name: "name 1"},
{ team_name: "Team 2", friendly_name: "name 2"}
]
}
我的脚本
const args = process.argv.slice(2);
const TEAM = require('./teams');
const Excel = require('exceljs');
const workbook = new Excel.Workbook();
for (var team = 0; team < TEAM[args].length; team++) {
console.log("Starting Excel File generation for " + TEAM[args][team]['team_name']);
var fhcw = require('../data_files/home/fhcw/' + TEAM[args][team]['friendly_name'] + '_home' + '.json');
fhcw = fhcw.map(Number);
workbook.xlsx.readFile('./excel_files/blank.xlsx')
.then(function() {
var worksheet = workbook.getWorksheet(1);
// Write FHCW
for (i=0; i < fhcw.length; i++) {
col = i+6;
worksheet.getCell('E'+ col).value = fhcw[i];
}
console.log(TEAM[args][team])
workbook.xlsx.writeFile('./excel_files/' + TEAM[args] + '/' + TEAM[args][team]['friendly_name'] + '.xlsx');
});
}
运行时我得到的输出是
Starting Excel File generation for Team 1
Starting Excel File generation for Team 2
undefined
(node:75393) UnhandledPromiseRejectionWarning: Unhandled promise rejection
(rejection id: 1): TypeError: Cannot read property 'friendly_name' of undefined
所以看起来文件没有被写入但循环仍在继续,我如何确保在进入下一个循环之前写入文件?
谢谢
【问题讨论】:
-
查看写入文件的文档:github.com/guyonroche/exceljs#writing-csv 可以看到有一个 .then 函数告诉您何时完成文件写入
-
谢谢,但似乎遇到了同样的问题
标签: javascript node.js loops