AWS Textract调用analyzeDocument无错误时回调不执行问题求助
问题根因
- 你的Lambda handler声明为
async类型,但调用analyzeDocument用了回调式写法,async handler不会等待异步回调执行完成,会在同步代码执行完毕后直接终止进程。正常调用Textract需要跨网络请求,耗时久,还没等响应返回Lambda就已经退出,因此回调内的日志不会打印。 - 配置类错误属于SDK本地同步校验场景,会立即触发回调,因此能在Lambda退出前执行到错误处理逻辑。
- 你的代码存在笔误:
JSON.stringfy应为JSON.stringify。
解决方案
推荐将SDK调用改为async/await写法,示例代码如下:
"use strict"; const AWS = require("aws-sdk"); exports.handler = async (event) => { let params = JSON.parse(event.body); console.log("Parse as document..."); let textract = new AWS.Textract(); let doc = params["doc"]; let config = { Document: { Bytes: doc, } }; try { console.log("analyzing..."); const data = await textract.analyzeDocument(config).promise(); console.log("data:" + JSON.stringify(data)); } catch (err) { console.log(err, err.stack); } console.log("Finished parsing as document."); // 按需添加返回值 return { statusCode: 200, body: JSON.stringify({message: '处理完成'}) } };
补充说明
- 如果你坚持使用回调写法,需要去掉handler的
async声明,并且在回调的最后调用Lambda原生的callback方法通知Lambda执行完成,避免提前退出。 - 要注意Lambda的超时时间设置,Textract处理大文件耗时较长,需要将超时时间调整到大于实际处理耗时的数值。
内容的提问来源于stack exchange,提问作者Wronski
相关产品推荐
相关产品推荐

