javascript - 在没有回调的情况下使用 Node.js 流
问题描述
要将 PDF 文件从 Node.js 服务器发送到客户端,我使用以下代码:
const pdf = printer.createPdfKitDocument(docDefinition);
const chunks = [];
pdf.on("data", (chunk) => {
chunks.push(chunk);
});
pdf.on("end", () => {
const pdfBuffered = `data:application/pdf;base64, ${Buffer.concat(chunks).toString("base64")}`;
res.setHeader("Content-Type", "application/pdf");
res.setHeader("Content-Length", pdfBuffered.length);
res.send(pdfBuffered);
});
pdf.end();
一切正常,唯一的问题是这里的流使用回调方法而不是async
/ await
。
我找到了一个可能的解决方案:
const { pipeline } = require("stream/promises");
async function run() {
await pipeline(
fs.createReadStream('archive.tar'),
zlib.createGzip(),
fs.createWriteStream('archive.tar.gz')
);
console.log('Pipeline succeeded.');
}
run().catch(console.error);
但我不知道如何将初始代码应用于带有stream/promises
.
解决方案
推荐阅读
- linq - Dynamics 365 CRM EntityFramework 或 LINQ
- javascript - 从 Sequelize 获取查询结果,然后按结果运行刮板作业结果
- java - 使用 Kotlin 将预处理值传递给 Spring/Boot 中的 Restcontroller
- reactjs - 在具有 ID 的路径上出现白页错误 - 反应路由器 dom
- angular - CanActivate 中的 Angular Http 调用被取消
- java - 如何从 Java 应用程序启用 https
- c# - 主菜单的设置菜单未在暂停菜单的设置菜单中更新。统一 C#
- python - 我正在尝试打印包含带有换行符的字符串的字典,但打印的是“\n”而不是换行符
- vue.js - 为什么我的 Quasar Android 应用程序没有更新?
- php - 如何打开放置在iframe html中直接访问阻止目录中的pdf文件