lambda 中的 Axios 不等待响应

use*_*972 6 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');
    })    
 };
Run Code Online (Sandbox Code Playgroud)

Tha*_*ssi 13

您的处理程序是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)
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以了解更多有关async/await 的信息