繁体   English   中英

如何使一个功能仅在写入文件后运行? (带有excel.js库的node.js)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM