【问题标题】:AWS Cloudwatch Metric and callbackWaitsForEmptyEventLoop do not work together?AWS Cloudwatch Metric 和 callbackWaitsForEmptyEventLoop 不能一起工作?
【发布时间】:2019-03-01 03:36:50
【问题描述】:

下面是我的代码的简化。

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)当你的处理程序是一个异步函数并且不应该使用回调模型时,你为什么要设置context.callbackWaitsForEmptyEventLoop(它应该返回一个promise或await并返回响应) 和 (2) 为什么你的处理程序是异步函数exports.handler = async (event,...?也许在这种情况下你应该删除async

标签: node.js amazon-web-services aws-lambda metrics


【解决方案1】:

如果您设置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";
};

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 2020-11-12
    • 2019-01-22
    • 2022-01-27
    • 1970-01-01
    • 2019-11-01
    • 2020-05-02
    • 2014-01-07
    • 2019-08-17
    相关资源
    最近更新 更多