我需要能够调用一些JS,并等到stimulsoft报告完成。
我想可能他们可能有自己的异步“味道”。
原始代码看起来像这样
report.renderAsync(() => {
console.log("Report rendered. Pages count: ", report.renderedPages.count);
// Export to PDF
report.exportDocumentAsync((pdfData: any) => {
// Converting Array into buffer
var buffer = Buffer.from(pdfData)
// File System module
var fs = require('fs');
// Saving string with rendered report in PDF into a file
fs.writeFileSync('./Invoice.pdf', buffer);
console.log("Rendered report saved into PDF-file.");
}, Stimulsoft.Report.StiExportFormat.Pdf);
});
我尝试了类似于以下代码的各种组合,但是我无法使其正确地“等待”-其他所有内容都将运行,然后该代码最后运行,
const result = await report.renderAsync(async() => {
console.log("Report rendered. Pages count: ", report.renderedPages.count); // << this outputs after all code!
// Export to PDF
await report.exportDocumentAsync(async (pdfData: any) => {
// Converting Array into buffer
var buffer = Buffer.from(pdfData)
// File System module
//var fs = await require('fs');
// Saving string with rendered report in PDF into a file
//await fs.writeFileSync('./Invoice.pdf', buffer);
console.log("Rendered report saved into PDF-file.");
return buffer
}, Stimulsoft.Report.StiExportFormat.Pdf);
});
return result
尝试创建一个Promise并包装到异步函数中。
report.renderAsync(async() => {
console.log("Report rendered. Pages count: ", report.renderedPages.count);
// Export to PDF
await new Promise((resolve) => {
report.exportDocumentAsync((pdfData: any) => {
// Converting Array into buffer
var buffer = Buffer.from(pdfData)
// File System module
var fs = require('fs');
// Saving string with rendered report in PDF into a file
fs.writeFileSync('./Invoice.pdf', buffer);
console.log("Rendered report saved into PDF-file.");
resolve();
}, Stimulsoft.Report.StiExportFormat.Pdf);
})
});
这是一个标准的回调,它只是用Async命名。
这是您要寻找的机器:
const getReport = () => new Promise(resolve =>
report.renderAsync(() => {
console.log("Report rendered. Pages count: ", report.renderedPages.count);
// Export to PDF
report.exportDocumentAsync((pdfData: any) => {
// Converting Array into buffer
var buffer = Buffer.from(pdfData)
// File System module
var fs = require('fs');
// Saving string with rendered report in PDF into a file
fs.writeFileSync('./Invoice.pdf', buffer);
console.log("Rendered report saved into PDF-file.");
resolve(report.renderedPages)
}, Stimulsoft.Report.StiExportFormat.Pdf);
});
然后像这样使用它:
getReport().then(pages => console.log(pages.count))
或:
async function doSomethingWithReport() {
const renderedPages = await getReport()
// do something with them
}
doSomethingWithReport()
您需要的Google搜索是“我如何承诺回调”。
我可以双重承诺使用
await new Promise(render => {
report.renderAsync(async () => {
console.log("Report rendered. Pages count: ", report.renderedPages.count);
// Export to PDF
await new Promise(resolve => {
report.exportDocumentAsync((pdfData: any) => {
// Converting Array into buffer
const buffer = Buffer.from(pdfData);
// File System module
const fs = require("fs");
// Saving string with rendered report in PDF into a file
fs.writeFileSync(generatedFileName, buffer);
console.log("Rendered report saved into PDF-file.");
resolve(report.renderedPages);
}, Stimulsoft.Report.StiExportFormat.Pdf);
});
render();
});
});
const data = readFileSync(generatedFileName);