【问题标题】:Async / await is not working (javascript / DynamoDB)异步/等待不起作用(javascript/DynamoDB)
【发布时间】:2019-05-05 23:37:44
【问题描述】:

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

异步函数的返回被放置在响应函数中 - 这应该在执行 put 操作(成功或不成功)时返回一个承诺。

然后我从另一个异步函数调用这个异步 put 函数:

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


    async function main() {

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

    }

当我调用这个 aysnc 主函数时,我希望它在写入“收到的反馈”之前从 put 函数提供 Success 语句,因为它应该等待 put 函数响应。

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

我在这里缺少什么?感谢您的支持!

【问题讨论】:

  • 能否分享修改后的完整代码(工作代码)
  • 请分享代码以从 dynamodb 获取数据。

标签: async-await amazon-dynamodb


【解决方案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 SDK 中的几乎每个函数都有promise() 变体,以将结果作为 Promise 返回。然后你就可以等待 Promise 了。不要将回调与承诺(async/await)混合使用——这会使代码难以阅读,最好在任何地方都坚持使用一种技术。

【讨论】:

  • 亲爱的 Tomas,效果很好!太感谢了。你有什么想法,为什么以前的代码不起作用?我期待异步函数中的“return”在放入 put-completion 后调用的函数中时返回一个 Promise ...
  • 你的问题是在回调函数中调用return一点效果都没有,因为回调实际上是一个匿名函数,没有人对它的返回值感兴趣,所以它会被忽略,并且包装函数最终总是什么都不返回。乐于助人,届时您可以接受答案。
  • 很好,它有帮助。顺便说一句,putputItem 有什么区别我只看到了putItem
  • @Xin 这些是不同的 API:DynamoDB::putItemDynamoDB.DocumentClient::put
  • @ttulka 谢谢。 DOcumentClient 界面更友好,更易于使用。谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
相关资源
最近更新 更多