AWS Cloudwatch Metric и callbackWaitsForEmptyEventLoop не работают вместе? - PullRequest
0 голосов
/ 01 марта 2019

ниже - упрощение моего кода.

const AWS = require('aws-sdk');


exports.handler = async (event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = true;

  AWS.config.update({region: 'cn-north-1'});

  // Create CloudWatch service object
  var cw = new AWS.CloudWatch({apiVersion: '2010-08-01'});

  var params = {
    MetricData: [
      {
        MetricName: 'PAGES_VISITED',
        Dimensions: [
          {
            Name: 'UNIQUE_PAGES',
            Value: 'URLS'
          },
        ],
        Unit: 'None',
        Value: 1.0
      },
    ],
    Namespace: 'MyNewNameSpace'
  };

  cw.putMetricData(params, function(err, data) {
    if (err) {
      console.log("Error", err);
    } else {
      console.log("Success", JSON.stringify(data));
    }
  });

  callback(null, "the result");
};

Кажется, что как только я установил callbackWaitsForEmptyEventLoop = false , метрика не может быть там размещена.Я не понимаю этот конфликт.

1 Ответ

0 голосов
/ 03 марта 2019

Если вы установите callbackWaitsForEmptyEventLoop = false, то выполнение вашей функции завершится до того, как будут выполнены все обратные вызовы.В этом случае функция завершается до того, как будет вызван обратный вызов из cw.putMetricData, поэтому ваш код не выполняется.Вероятно, что операция в CloudWatch действительно происходит, но вы просто не видите обратный вызов, поскольку он не происходит.

Вот ваша функция, используя модель async/await, без обратных вызовов и без callbackWaitsForEmptyEventLoop:

const AWS = require('aws-sdk');

exports.handler = async event => {
  AWS.config.update({region: 'cn-north-1'});

  // Create CloudWatch service object
  var cw = new AWS.CloudWatch({apiVersion: '2010-08-01'});

  var params = {...};

  await cw.putMetricData(params)
    .promise()
    .then(data => {console.log("Success", JSON.stringify(data));})
    .catch(err => {console.log("Error", err);})

  return "the result";
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...