node.js - 异步 dynamoDB 方法运行两次
问题描述
我在为 AWS 中的 API 网关编写 lambda 函数时遇到问题。我不知道为什么有些 dynamoDB 方法会运行两次。这似乎是对 async/await 技术的一些错误使用。它甚至发生在 SQS 或 SNS 方法中。
这是我的功能:
const orderPut = async (orderID: string, status:BasicOrderStatus): Promise<APIGatewayProxyResult> => {
let response: APIGatewayProxyResult; // Init variables
try {
...
console.log("blabla"); // THIS LOG APPEARS JUST ONCE IN CONSOLE
let params = {...;
await docClient.update(params, function (err, data) {
if (err) {
console.error("Unable to update order status. Error: ", JSON.stringify(err, null, 2));
} else {
console.log("Update Order Status succeeded: ", JSON.stringify(data, null, 2)); // THIS LOGS APPEARS TWICE IN CONSOLE
}
}).promise();
response = createSuccessResponse() // Creates successful response
} catch (e) {
response = createErrorResponse(e) // creates error response
}
return Promise.resolve(response) }
我检查了一下,我确定这不是我的 lambda 函数执行了两次。例如,我可以看到我的日志在控制台上只出现了一次,但来自 dynamoDB 方法的日志出现了两次。
它发生在所有 muy 函数中,但不是在每个 dynamoDB 方法中发生,或者不是每次都发生。超级奇怪,不明白为什么。
我正在使用 Node.js
有什么帮助吗?提前非常感谢!
解决方案
是的,因为您正在提供回调并尝试使用承诺版本。
使用承诺或回调。IE
带着承诺
try {
const data = await docClient.update(params).promise();
console.log("Update Order Status succeeded: ", JSON.stringify(data, null, 2)); // THIS LOGS APPEARS TWICE IN CONSOLE
} catch (err) {
console.error("Unable to update order status. Error: ", JSON.stringify(err, null, 2));
}
或回调。
docClient.update(params, function (err, data) {
if (err) {
console.error("Unable to update order status. Error: ", JSON.stringify(err, null, 2));
} else {
console.log("Update Order Status succeeded: ", JSON.stringify(data, null, 2)); // THIS LOGS APPEARS TWICE IN CONSOLE
}
});
推荐阅读
- c - 尝试从顶点开始 (C)
- python - 为什么 Seaborn 在绘制散点图/线图时无法解释输入的列?
- python - Python列表的操作
- javascript - React-DOM 没有渲染网页中的元素
- java - Java 使用客户端凭据授予访问令牌并存储令牌
- mysql - 无法在 NetBeans(11.3) 中连接到 mysql
- reactjs - 将 material-ui 与 reactJS 一起使用会导致无效的钩子调用。Hooks 只能在函数组件的主体内部调用
- json - UPS RESTful 集成测试 URI 出现“未找到跟踪信息”错误
- c++ - 如何实现从虚拟键码打印我的语言字符?
- razor-pages - Razor Pages 页面处理程序未使用 POST 方法传递 ID