在AWS Lambda函数中遇到“LAMBDA_RUNTIME Failed to post handler success response. Http response code: 403.”错误,发现Promise.all的参数不能是嵌套数组

在lambda函数最后的return语句是这样的:

1 return Promise.all(  
2   _.map(results, (temp, assetID) => { 
3     _.map(temp, (measurements, time) => 
4       sdk.pushMeasurements({ assetID, timestamp: time, measurements })  
5     )
6   })
7 )

首先这里的语法问题是第一个map函数加了大括号但没有return,参考我的博文https://www.cnblogs.com/mrlonely2018/p/13254007.html

接着看一下results的结构,是一个多层嵌套的json对象:

Promise.all 中要做的就是把这个嵌套json对象展开,推送到数据库中。

而Lambda中出现“LAMBDA_RUNTIME Failed to post handler success response. Http response code: 403.”的可能原因是:
以上代码返回了一个Promise对象的数组的数组,而lambda的执行器试图先将其字符串化(stringify),然后再返回。而这串东西太大,最终导致403 错误。

另外,以上代码在Promise.all 中 返回的参数是一个嵌套的数组(nested array),而Promise.all 应该接收一个iterable作为参数。

解决方法:

  1. 去除第一个map函数的大括号
  2. 将第一个map改为flatmap

附lodash参考文档:

https://lodash.com/docs/4.17.15#flatMap

https://lodash.com/docs/4.17.15#map

原文地址:https://www.cnblogs.com/mrlonely2018/p/13254271.html