在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作为参数。
解决方法:
- 去除第一个map函数的大括号
- 将第一个map改为flatmap
附lodash参考文档: