zoukankan      html  css  js  c++  java
  • 在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

  • 相关阅读:
    HDU4126
    训练赛Day6-The 36th ACMICPC Asia Regional Beijing Site
    弦图
    HDU4821 字符串哈希+尺取
    HDU1854
    HDU1166
    输入输出挂
    LightOj 1027 数学期望
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/mrlonely2018/p/13254271.html
Copyright © 2011-2022 走看看