我正在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');
})
};
答案 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响应。