lambda中的Axios未等待响应

pu3pd22g  于 2023-10-18  发布在  iOS
关注(0)|答案(2)|浏览(148)

我在aws lambda中调用axios post方法。大多数时候lambda并不返回任何结果。
START RequestId:ac 92 d268-d212- 4 b80-a06 c-927922 fcf 1d 5版本:$LATEST END RequestId:AC92D268-D212-4B80-A06C-927922FCF1D5
但有时lambda返回预期的结果。看起来lambda并没有等待axios完成。下面是Lambda代码。

var axios = require('axios')
exports.handler = async (event, context,callback) => {
    axios.post('https://example.com/testapi/api.asmx/GetNames', {})
    .then((res) => {    
      console.log(JSON.stringify(res.data,null,2))
      callback(null,'success');
    })
    .catch((error) => {     
      console.error(error)
      callback(null,'error');
    })    
 };
66bbxpm5

66bbxpm51#

处理程序是async,这意味着它将异步运行并返回Promise。这意味着你的函数在你的代码实际运行之前就被终止了。
由于axios已经可以与Promises一起使用,并且您的方法已经是async,因此您不需要更改太多。这将解决问题:

const axios = require('axios')
exports.handler = async (event) => {
    try {
        const res = await axios.post('https://example.com/testapi/api.asmx/GetNames', {})
        console.log(res)
        return {
            statusCode: 200,
            body: JSON.stringify(res)
        }
    } catch (e) {
        console.log(e)
        return {
            statusCode: 400,
            body: JSON.stringify(e)
        }
    }
};

如果你想了解更多关于async/await的信息,你可以这样做。

yhxst69z

yhxst69z2#

我有一个类似的问题,我在Lambda中使用Axios进行第三方API调用,在花了几乎一天的时间注意到我的lambda有6秒的默认超时。有时候,来自API的响应时间超过6秒,导致502响应。

相关问题