【问题标题】:async dynamoDB methods run twice异步 dynamoDB 方法运行两次
【发布时间】:2020-12-11 20:47:36
【问题描述】:

我在为 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 方法中发生,或者不是每次都发生。超级奇怪,不明白为什么。

我正在使用 Nodejs

有什么帮助吗?提前非常感谢!

【问题讨论】:

    标签: node.js amazon-web-services async-await


    【解决方案1】:

    是的,因为您正在提供回调并尝试使用承诺版本。

    使用承诺或回调。即

    承诺

    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
        }
    });
    

    【讨论】:

    • 谢谢@kg99 :) 现在我明白了!我删除了回调,而不是只运行一次!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    相关资源
    最近更新 更多