首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >异步/等待不起作用(javascript / DynamoDB)

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

Stack Overflow用户
提问于 2019-05-05 15:13:41
回答 1查看 14.8K关注 0票数 14

我将一个DynamoDB Put请求封装到一个异步函数中。

代码语言:javascript
代码运行次数:0
运行
复制
 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函数:

代码语言:javascript
代码运行次数:0
运行
复制
    var param1 = "50";
    var param2 = "60";


    async function main() {

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

    }

当我调用这个aysnc主函数时,我希望它在编写“收到的反馈”之前提供put函数的成功声明,因为它应该等待put函数响应。

但是,我的控制台“反馈”记录在put异步函数中,在等待的put异步函数中记录“成功”语句的优先

我在这里错过了什么?多谢你们的支持!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-05 15:26:42

尝试更改代码,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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()变体作为保证返回结果。那你就等着承诺吧。不要将回调与承诺(异步/等待)混为一谈--这会使代码难以阅读,最好在任何地方都坚持一种技术。

票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55993448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档