Как поместить элемент AWS DynamoDB docClient.get в переменную? - PullRequest
0 голосов
/ 07 июля 2019

В настоящее время я работаю с 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 ..

1 Ответ

1 голос
/ 07 июля 2019

Почти все методы 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);
}

Описание структуры возвращаемого объекта можно найти в документации .

Аналогично для .put.

...