【发布时间】:2021-08-01 19:00:53
【问题描述】:
我正在使用库JSZip 解压缩文件,并且我能够获取每个文件名。但是,我要做的是对文件的内容进行一些处理。我知道您可以根据 API 执行 zip.file(name).async(type).then() 来做到这一点。
但由于某种原因,当我在我的 lambda 函数中执行此操作时,它根本不会命中该函数。我试图返回那行代码,但我刚刚得到Promise <pending>...我试图用 try/catch 包装它,但没有做任何事情。我做了一个异步/等待,但这也不起作用。像这样的回调:
zip.file(name).async('blob').then(function(content) {
//Do processing in here
});
似乎也不起作用。我需要做什么才能获取特定文件的内容?我所做的一切都不是工作,我认为这与未决的承诺有关。我被困在这一点上,不知道该怎么做。非常感谢任何帮助。以下是我的代码供参考:
let zip = new JSZip();
zip.loadAsync(file).then(function(contents) {
Object.keys(contents.files).forEach(function(name) {
zip.file(name).async('blob').then(function(content) {
// Processing here
});
});
});
编辑
完整代码:
index.js
const manager = require("./manager.js");
exports.handler = async (event, context, callback) => {
return manager.manager(event, callback);
};
manager.js
exports.manager = async function (event, callback) {
const path = '/temp/' + fileName;
const file = fs.readFileSync(path);
let zip = new JSZip();
zip.loadAsync(file).then(function(contents) {
Object.keys(contents.files).forEach(function(name) {
zip.file(name).async('blob').then(function(content) {
// Processing here
});
});
});
}
【问题讨论】:
-
CloudWatch Logs 向您展示了什么? Lambda 函数是否超时或正常完成?您的 Lambda 函数返回什么?您没有包含代码的关键部分(例如用于调试的控制台日志、Lambda 的函数声明、Lambda 的返回语句)。
-
lambda 函数正常完成。除了我包含的控制台日志之外,没有从 lambda 返回任何内容。我将更新我的问题以提供完整代码
-
在您的 Lambda 处理程序声明中,不要同时使用异步和回调。使用其中一个(最好是异步的)。此外,对于异步处理程序,您向 Lambda 运行时返回响应、错误或承诺。不要返回任何东西。
-
在
async函数中,您也应该使用await关键字。 -
您希望您的
manager返回什么?
标签: node.js aws-lambda async-await promise jszip