Новичок: как использовать обещания в Javascript? - PullRequest
0 голосов
/ 29 октября 2019

Я работаю с асинхронной лямбда-функцией AWS, которая записывает данные в таблицу DynamoDB для моего умения Alexa умный дом. Проблема у меня заключается в том, что она не пишет базу данных с использованием асинхронного. Однако я конвертирую его в синхронный, он будет работать правильно. У меня нет большого опыта работы с Javascript и нулевого опыта использования обещаний. Я хотел бы знать, что не так с моим кодом / обещанием.

Спасибо за вашу помощь или предложение!

exports.handler =  async function (event, context) {

    // Dump the request for logging - check the CloudWatch logs
    console.log("index.handler request  -----");
    sendToDynamo("Signal-01","powerState","ON");

}

function sendToDynamo(endpoint,state,value) {
  console.log("send to dynamo start")

  var ddb = new AWS.DynamoDB({
                  apiVersion: '2012-08-10',
                  region: 'us-east-1'})

  var params = {
      TableName: "TestDB",
      Item: {
          'ItemId':{
            S: endpoint  
          } ,
          'State':{
            S: state  
          } ,
          'Value':{
            S: value  
          } 
      }
  };

  var putObjectPromise = ddb.putItem(params).promise();

    putObjectPromise.then(function(data) {
      console.log('*** Success ***');
    })
    .catch(function(err) {
      console.log(err);
    });
}

1 Ответ

1 голос
/ 29 октября 2019
exports.handler =  async function (event, context) {

    // Dump the request for logging - check the CloudWatch logs
    console.log("index.handler request  -----");
    let data = await sendToDynamo("Signal-01","powerState","ON").catch(console.log);
    console.log('*** Success ***');
}

function sendToDynamo(endpoint,state,value) {
  console.log("send to dynamo start")

  var ddb = new AWS.DynamoDB({
                  apiVersion: '2012-08-10',
                  region: 'us-east-1'})

  var params = {
      TableName: "TestDB",
      Item: {
          'ItemId':{
            S: endpoint  
          } ,
          'State':{
            S: state  
          } ,
          'Value':{
            S: value  
          } 
      }
  };

  return ddb.putItem(params).promise();
}
...