异步/等待不起作用(javascript / DynamoDB)

时间:2019-05-05 15:13:42

标签: async-await amazon-dynamodb

我有一个包装在异步函数中的DynamoDB Put请求。

 async function putter(param1, param2) {

        const paramsPut = {
            TableName: MyTableName,
            Item: {
                "hashKey": param1,
                "sortKey": param2,
            }
        };

        dynamodb.put(paramsPut, function(err, data) {

            if (err) {
                console.log("Failure")
                console.log(data)
                return data
            }
            else {
                console.log("Success")
                console.log(data)
                return data
            }
        });
    };

异步函数的返回值放置在响应函数中-该函数应在执行放置操作(成功或不成功)后提供一个承诺。

然后我从另一个异步函数中调用此异步放置函数:

    var param1 = "50";
    var param2 = "60";


    async function main() {

        await putter(param1 , param2)
        console.log("Feedback received")

    }

当我调用此aysnc主函数时,我希望它在写入“ Feedback receive”之前提供put函数的Success语句,因为它应等待put函数的响应。

  

但是我的控制台记录 “收到反馈” 之前   在put async函数中记录“成功”语句   正在等待。

我在这里想念什么?感谢您的支持!

1 个答案:

答案 0 :(得分:1)

尝试如下更改代码:

try {
    const data = await dynamodb.put(paramsPut).promise()
    console.log("Success")
    console.log(data)
    return data
} catch (err) {
    console.log("Failure", err.message)
    // there is no data here, you can return undefined or similar
}

几乎所有AWS开发工具包中的函数都具有promise()变体,以将结果作为Promise返回。然后,您可以等待Promise。不要将回调与promise(async / await)混合使用,这会使代码难以阅读,最好在任何地方都使用一种技术。