Аксиос в лямбде не ждет ответа - PullRequest
1 голос
/ 05 марта 2019

Я использую метод сообщения axios в aws lambda.В большинстве случаев лямбда не возвращает никаких результатов. В журналах отображаются следующие результаты

START RequestId: ac92d268-d212-4b80-a06c-927922fcf1d5 Версия: $ LATEST END RequestId: ac92d268-d212-4b80-a06c-927922fcf1d5

Но иногда лямбда возвращает ожидаемые результаты.Похоже, лямбда не дожидается завершения axios.ниже лямбда-код.

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');
    })    
 };

1 Ответ

1 голос
/ 05 марта 2019

Ваш обработчик 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 , если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...