Lambda中的Axios不等待响应

时间:2019-03-05 11:04:58

标签: axios

我正在aws lambda中调用axios post方法。通常,lambda不会返回任何结果。日志显示以下结果

  

START RequestId:ac92d268-d212-4b80-a06c-927922fcf1d5版本:$ 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');
    })    
 };

2 个答案:

答案 0 :(得分:1)

您的处理程序为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的更多信息。

答案 1 :(得分:0)

我遇到了类似的问题,我花了整整一天的时间注意到我的lambda有6秒的默认超时时间,然后在Lambda中用Axios进行了第三方API调用。有时,来自api的响应会超过6秒,并导致502响应。