Как сделать так, чтобы одна функция запускалась только после записи файла?(node.js с библиотекой excel.js) - PullRequest
0 голосов
/ 17 марта 2019

Мой файл записывается в функцию convertfile () после активации formatworkbook (), поэтому выдает ошибку, поскольку переменная xlsxWorkbook не существует, пока мы не конвертируем файл.Я новичок в асинхронном ожидании и обещаниях, но я попытался сделать его асинхронным (используя оба)

Несколько вещей, которые я пробовал:

1) Пытаясь настроить его, чтобы вернутьзаписанный файл в результате выполнения обещания (которое, используя ключевое слово .then, я все еще думаю, что немного выполняю), а затем сообщая рабочей книге формата, что нужно ожидать convertFile (объявляя ее асинхронной функцией)

2) Вызов formatWorkbookв convertFile () после оператора then.

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, а затем преобразовано.мой идеал, конечно, чтобы убедиться, что файл сначала конвертируется.

Мой идеал здесь, когда этот файл готов, мы читаем файл - выполняем несколько функций на нем, а затем пишем файл с изменениями.Что мне здесь не хватает?

пс.success.xlsx записывает CSV-файл как xlsx правильно.

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Вы также можете сделать это так:

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)
    }
})
1 голос
/ 17 марта 2019

Поместите вызов convertFile (workbook) внутри метода .then вашего formatWorkbook следующим образом:

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 перед выполнением следующих строк кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...