【发布时间】:2020-11-28 05:08:39
【问题描述】:
我没有意识到这么简单的任务会有多么危险。
我们正在尝试流式读取存储在 S3 中的 JSON 文件——我认为我们已经完成了这部分工作。
我们的 .on('data') 回调被调用,但 Node 选择并选择它想要运行的位 - 似乎是随机的。
我们设置了一个流阅读器。
stream.on('data', async x => {
await saveToDb(x); // This doesn't await. It processes saveToDb up until it awaits.
});
有时 db 调用会到达 db ——但大多数时候它不会。 我得出的结论是 EventEmitter 在异步/等待事件处理程序方面存在问题。 只要您的代码是同步的,它似乎就会与您的异步方法一起播放。但是,在您等待时,它会随机决定是否实际执行此操作。
它流式传输各种块,我们可以console.log 将它们输出并查看数据。但是,一旦我们尝试触发 await/async 调用,我们就会停止看到可靠消息。
我在 AWS Lambda 中运行它,有人告诉我有一些特殊注意事项,因为它们显然在某些情况下会停止处理?
我尝试在 IFFY 中包围 await 调用,但这也不起作用。
我错过了什么? 有没有办法告诉 JavaScript——“好的,我需要你同步运行这个异步任务。我的意思是——也不要再触发任何事件通知。就坐在这里等着。”?
【问题讨论】:
标签: node.js amazon-s3 aws-lambda async-await jsonstream