Как http код состояния при возврате обещания в лямбду? - PullRequest
2 голосов
/ 19 мая 2019

Ниже моя лямбда-функция. Вместо этого он возвращает обещание, используя обратный вызов. Интересно, как я могу вернуть другой код статуса http на шлюз API?

exports.handler = async (event, context) => {

    return new Promise((resolve, reject) => {
        const options = {
            ...
        };

        const req = http.request(options, (res) => {
          resolve('Success');
        });

        req.on('error', (e) => {
          reject(e.message);
        });

        // send the request
        req.write('');
        req.end();
    });
};

Ответы [ 2 ]

1 голос
/ 19 мая 2019

В новой среде выполнения Node.js 8.10 появились новые типы обработчиков, которые могут быть объявлены с помощью ключевого слова «async» или могут возвращать обещание напрямую.

Новые типы обработчиков являются альтернативой шаблону обратного вызова, который все еще полностью поддерживается.

Как указано в другом ответе, либо вы можете напрямую вернуть код состояния с помощью ключевого слова «async», либо вы можете вернуть обещание напрямую.Пожалуйста, обратитесь к указанному ниже коду, который напрямую возвращает обещание от лямбда-функции.

exports.handler = (event, context) => {
    return new Promise ((resolve, reject) => {
        resolve()
    })
    .then (()=>{
        return {
            statusCode : 200
        }
    })
    .catch(() =>{
        return {
            statusCode : 400
        }
    })
}

Также, пожалуйста, обратитесь к нижеупомянутой ссылке, которая дает детальное представление о том, как обещания и асинхронное ожидание исключают подход, основанный на обратном вызове.

https://aws.amazon.com/blogs/compute/node-js-8-10-runtime-now-available-in-aws-lambda/

0 голосов
/ 19 мая 2019

Нет необходимости возвращать обещание, поскольку ключевое слово async сделает это за вас:

exports.handler = async (event, context) => {
   return {
        statusCode: 201, // or whatever status code you want
        headers: {},
        body: JSON.stringify({})
    };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...