typescript - 使用 Azure Function Core Tools 将事件中心消息写入本地文件
问题描述
我有一个事件中心触发的 TypeScript Azure 函数。在使用 Azure Function Core Tools 执行时,我正在尝试将接收到的事件写入本地文件。这只是为了帮助开发,而不是我将在生产或 Azure 内部做的事情。
import { AzureFunction, Context } from "@azure/functions"
import fs = require('fs');
const eventHubTrigger: AzureFunction = async function (context: Context, eventHubMessages: any[]): Promise<void> {
context.log(`Eventhub trigger function called for message array ${eventHubMessages}`);
eventHubMessages.forEach((message, index) => {
context.log(`Processed message ${message}`);
let data = JSON.stringify(message, null, 2);
fs.writeFile('messages.json', data, { flag: 'a+' }, (err) => {
if (err) throw err;
context.log('Data written to file');
});
});
};
export default eventHubTrigger;
当我使用 Azure 函数核心工具运行此函数时,项目根目录(或我能找到的任何地方)中没有“messages.json”文件。请就如何在使用 Azure Function Core Tools 执行时将此 JSON 数据写入本地磁盘提出建议。
解决方案
这里的问题是这fs.writeFile
是一个异步操作,但该函数不会等待它,因为该函数是在async
没有任何await
.
这是您可以通过不使用async
和调用context.done()
来修复它的一种方法
import { AzureFunction, Context } from "@azure/functions"
import fs = require('fs');
const eventHubTrigger: AzureFunction = function (context: Context, eventHubMessages: any[]): Promise<void> {
context.log(`Eventhub trigger function called for message array ${eventHubMessages}`);
let dataToWrite = "";
eventHubMessages.forEach((message, index) => {
context.log(`Processed message ${message}`);
let data = JSON.stringify(message, null, 2);
dataToWrite += data;
});
fs.writeFile('messages.json', dataToWrite, { flag: 'a+' }, (err) => {
if (err) throw err;
context.log('Data written to file');
context.done();
});
};
export default eventHubTrigger;
另一种方法是使用此SO 线程中涵盖promisify
的方法。fs
推荐阅读
- node.js - Docker 撰写配置文件未在 Mac 中正确同步目录
- python - 在python中的所有页面上获取tableau用户
- xcode - Xcode SwiftUI 按钮 - 无法居中
- c++ - Xcode 自动完成功能不适用于通过 CMake 包含的 C++ 库
- javascript - 如何将标签的一部分复制到另一个标签?
- outlook - Outlook事件函数在共享邮箱上使用时触发多次 - C#
- macos - 与自制软件一起安装时出现 GCC 9 标头错误
- sql - SQL 在按时间分组的时间范围内有效的行数
- maven - 在 ec2 实例上更改 pom.xml 中的值键
- signals - 信号何时自动重新抛出?