如何将AWS DynamoDB docClient.get项目放入变量中?

时间:2019-07-07 08:27:02

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

我目前正在代码中使用AWS开发工具包和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 ..

1 个答案:

答案 0 :(得分: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类似。