[英]How can I make one function only run after a file has been written ? (node.js with excel.js library)
MY文件在formatworkbook()激活后将写入函数convertfile(),因此,由于xlsxWorkbook变量在转换文件之前不存在,因此引发错误。 我是异步等待的新手,但是我确实尝试使其异步(同时使用)
我尝试了几件事:
1)尝试将其设置为由于promise(使用.then关键字,我仍然认为我正在做一点工作)返回书面文件,然后告诉格式工作簿等待convertFile(将其声明为异步函数)
2)在then语句之后调用convertFile()中的formatWorkbook。
var express = require('express');
var router = express.Router();
const multer = require('multer');
var Excel = require('exceljs');
const index = require("../routes/index")
const path = require('path')
const fs = require('fs')
var workbook = new Excel.Workbook();
//var myworkbook = workbook.csv.readFile('uploads/HVACresultfile.csv')
// if no workbook await the file function should go here or something.
convertFile(workbook)
function convertFile(workbook) {
var workbook = new Excel.Workbook();
csvWorkbook = workbook.csv.readFile('uploads/HVACresultfile.csv')
csvWorkbook.then(function(result){
try {
workbook.xlsx.writeFile('uploads/success.xlsx')
console.log('converted')
} catch(err){
console.log(err)
}
})
}
function formatWorkbook(workbook) {
var workbook = new Excel.Workbook();
var xlsxWorkbook = workbook.xlsx.readFile('uploads/success.xlsx')
var xlsxWorksheet = workbook.getWorksheet('sheet1')
xlsxWorkbook.then(function(result){
try {
assessFile(xlsxWorkbook,xlsxWorksheet)
console.log('assessing')
} catch(err) {
console.log(err)
}
})
}
function assessFile(workbook,xlsxWorkbook,xlsxWorksheet) {
console.log('burf')
}
formatWorkbook()
运行这些功能将console.log评估,burf然后转换。 我的理想当然是确保首先转换文件。
我的理想选择是在完成该文件后,读取文件-对文件执行多项功能,然后将文件进行编辑。 我在这里想念什么?
ps。 success.xlsx确实将CSV文件正确地编写为xlsx。
将convertFile(workbook)调用放置在formatWorkbook的.then方法内,如下所示:
async function convertFile(workbook) {
var workbook = new Excel.Workbook();
csvWorkbook = workbook.csv.readFile('./products.xlsx')
await csvWorkbook.then(async function(result){
await workbook.xlsx.writeFile('./products2-teste-stack.xlsx').then( () => {
console.log('converted')
})
})
}
function formatWorkbook(workbook) {
var workbook = new Excel.Workbook();
var xlsxWorkbook = workbook.xlsx.readFile('uploads/success.xlsx')
var xlsxWorksheet = workbook.getWorksheet('sheet1')
xlsxWorkbook.then(async function(result){
try {
// CALL CONVERT WHEN YOU FINISH READING YOUR FILE
await convertFile(workbook)
assessFile(xlsxWorkbook,xlsxWorksheet)
console.log('assessing')
} catch(err) {
console.log(err)
}
})
}
这样,在完成读取文件之前不会调用它。 如果将函数转换为异步函数,则可以在执行下一行代码之前,等待convertFile承诺解析。
您也可以这样:
workbook.xlsx.readFile('uploads/success.xlsx').then(async function() {
try {
var xlsxWorksheet = workbook.getWorksheet('sheet1')
await convertFile(xlsxWorksheet)
assessFile(xlsxWorkbook,xlsxWorksheet)
console.log('assessing')
} catch(err) {
console.log(err)
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.