【问题标题】:Lambda function running code first run but not subsequent runsLambda 函数运行代码第一次运行但不后续运行
【发布时间】:2021-01-09 03:27:18
【问题描述】:

我有一个 Node.js Lambda 函数,它在初始运行期间运行良好,但是在随后的运行期间 - 1 分钟间隔 - 它在大约 1.5 毫秒内完成并且除了输出完成之外根本没有运行我的代码 - @ 987654321@ 在我的then 块中。

这是什么原因?

module.exports.perf = function(event, context, callback) {
  context.callbackWaitsForEmptyEventLoop = false;
  
  let input = JSON.parse(event.Records[0].body);

  const point1 = new Point('elapsedTime')
    .tag(input.monitorID, 'monitorID')
    .floatField('elapsedTime', input.perf_value)
  writeApi.writePoint(point1)
  writeApi
  .close()
  .then(() => {
      console.log('FINISHED ... ')
  })
  .catch(e => {
      console.error(e)
      if (e instanceof HttpError && e.statusCode === 401) {
      console.log('Run ./onboarding.js to setup a new InfluxDB database.')
      }
      console.log('\nFinished ERROR')
  })
  return
};

编辑**

const writeApi = new InfluxDB({url: InfluxURL, token}).getWriteApi(org, bucket, 'ms')```

【问题讨论】:

  • 你不应该在异步代码完成之前从函数中return
  • @Bergi 所以它不应该是异步的,因为我那里没有异步。而且我认为这不能解释为什么它会运行一次,但在那之后就不行了。
  • writeApi 显然是异步的,因为它返回了一个承诺。
  • @Bergi 好的,我会测试一下看看,但我有信心就是这样,因为问题似乎并不指向异步
  • @Bergi 删除了,没有运气。自从我发布了这个问题之后,lambda 就没有运行过,我再次启动了计划,它运行了一次,它第二次和第三次运行了我在 OP 中提出的问题,即后续不运行我的代码运行。这似乎不是异步问题,而是与 lambda 如何处理我的代码有关的不同问题。

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


【解决方案1】:

感谢网上其他人的帮助,我最终想出了一个解决方案,结果在以下代码中将.close() 更改为.flush()

writeApi
  .flush() # used to be .close()
  .then(() => {
      console.log('FINISHED ... ')
  })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多