【问题标题】:How to put AWS DynamoDB docClient.get item into variable?如何将 AWS DynamoDB docClient.get 项放入变量中?
【发布时间】:2019-07-07 08:27:02
【问题描述】:

我目前在我的代码中使用 AWS SDK 和 DynamoDB,但我经常遇到的主要问题是,如果我创建异步事件链,则查找变量的范围。

这适用于我的 node.js 服务器,它将运行电报机器人并在我的 AWS DynamoDB 中检索/存储数据。它适用于大量嵌套调用和传递变量,但使代码非常复杂。

我想要实现的是类似于 ASYNC/AWAIT 的东西。

async DB(){
  let paramsGet = { TableName:'some_table', Key:{"id":some_id} }
  let database_item = await docClient.get(paramsGet, function(err,data){
    if(err){
      console.log(err)
    } else {
      console.log("SUCCESSFULL GET");
      return data //RETURN IT TO VARIABLE
    }
  }

  let paramsPut = {
          TableName: "my_table", 
          Item: {
                  //THESE VALUES SHOULD WAIT FOR GET TO FINISH
                  //THEN SEND IT TO DB
                  "id":database_item.id,
                  "name":database_item.name,
                  "value":database_item.value
                }
  }

  docClient.put(paramsPut, function(err,data){
    if(err){
      console.log(err)
    } else {
      console.log("SUCCESSFULL PUT");
    }
  }

}
DB();

当我这样做let db_item = await docClient.get(...)console.log(db_item) 时,它会显示一个数据流,它看起来不像返回的任何东西,就像if(err){ console.log(err) } else { console.log(data)} 中的数据一样?

我应该如何处理这个返回值?它是一个承诺还是其他需要解析的东西?我似乎找不到db_item.type..

【问题讨论】:

    标签: javascript node.js amazon-dynamodb aws-sdk aws-cli


    【解决方案1】:

    几乎所有 AWS JavaScript SDK 方法都有 .promise() 函数返回被调用操作的 Promise。

    await 与 Promises 配合使用,您可以根据需要使用它:

    try {
       let res = await docClient.get(paramsGet).promise();
       let database_item = res.Item;
       console.log("SUCCESSFULL GET", database_item);
    } catch(err) {
       console.log(err);
    }
    

    可以在documentation中找到返回对象的结构说明。

    .put 类似。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2015-11-02
      • 1970-01-01
      • 2016-02-13
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      相关资源
      最近更新 更多