确保res.download()在另一个函数执行后执行

时间:2018-06-03 19:54:36

标签: javascript node.js express

我在本项目中使用Express.js和HTML来获取数据,处理数据并将其写入一个文件,该文件在点击HTML表单中的提交按钮后立即下载。

邮件调用中的

res.download()执行并尝试下载尚未写入的文件,并且我试图了解如何使res.download()成为let filtered = [], countEv = []; let createdGTEDate = 0, createdLTEDate = 0; app.post('/', (req, res) => { getData(); res.download('./filename.txt'); } getData() { module.events.list( { limit: 100, types: ["charges"], created: {gte: createdGTEDate, lt: createdLTEDate} }, function (err, events) { if(events !== null) { for (let i = 0; i < events.data.length; i++) { countEv.push(events.data[i]); } if (events.has_more) { recurringPaginate(events["data"][events["data"].length - 1].id); } } }); function recurringPaginate(starting_after) { module.events.list( { limit: 100, created: {gte: createdGTEDate, lt: createdLTEDate}, types: ["charge.succeeded", "charge.failed"], starting_after: starting_after }, function (err, events) { for (let i = 0; i < events.data.length; i++) { countEv.push(events.data[i]); } if (events.has_more) { recurringPaginate(events["data"][events["data"].length - 1].id); } if(events.has_more === false) { filterCharges(); } }); } } function filterCharges() { uniqueCharges = _.uniq(countEv, function (u) { return u.data.id; }); pendingCharges = uniqueCharges.filter(function (obj) { return obj.data.type === "pending"; }); writeCSV(); } function writeCSV() { let writeStream = fs.createWriteStream("Report.csv"); let writeData = "Start Date, End Date, Pending Charge Count \n" + createdGTEDate + ", " + createdLTEDate + ", " + pendingCharges.length + " \n"; writeStream.write(writeData); writeStream.close(); } 在处理完数据后执行并写入文件。

以下是代码:

getData()

关于代码的说明: - 将Underscore.js用于uniq()函数。

res.download()函数需要一段时间才能完成执行,因为它需要对大量数据进行分页,每次提交相应的HTML表单时,后调用都会导致getData()立即执行并尝试在res.download()完成数据之前下载该文件。

关于在POST .kibana/doc/index-pattern:pattern_name/_update { "script": "ctx._source.new_field ={'name':'test', 'type':'number', 'count':0, 'scripted':true, 'script':4150, 'lang':'painless', 'searchable':true, 'aggregatable':true, 'readFromDocValues':false}" } 之前确保所有数据已下载,处理并写入文件的一些好方法的任何想法实际上都会导致文件被下载?

编辑:在上面添加了缺少的代码。谢谢大家!

1 个答案:

答案 0 :(得分:0)

当然,要在此处回答我自己的问题,请在注释中提供有关@information_interchange的回调的提示后,只需在关闭时为写流提供回调函数即可解决。

.....
.....
writeStream.write(writeData); //write data to CSV write stream
    writeStream.close();
    writeStream.on("close", function() {  //callback function calls the download function when write stream has been closed
        downloadReport(res);
    })
.....
.....

感谢大家的帮助以及最终流浪的人们,我希望这里的所有答复对您有所帮助!