Невозможно, чтобы AWS лямбда ожидала завершения асинхронного запроса. - PullRequest
0 голосов
/ 04 июня 2018

Я здесь с такой же / схожей проблемой в понимании асинхронных вызовов в AWS Lambda Node 8.10.Ниже мой код.Он работает, но не так, как я хочу.Я пытаюсь получить заголовок HTTPS и соответствующий сертификат SSL.Если я запускаю лямбду один раз, она запускается успешно, но данных нет.Если я проверяю это снова и снова, один из возвратов возвращается и выводит getPeerCertificate в журнал.

Здесь я чешу голову ... определена функция обратного вызова res.Я полагаю, что происходит то, что лямбда исчезает, прежде чем вызывается обратный вызов из request.Я изо всех сил пытаюсь сохранить лямбду, чтобы дождаться возвращения из запроса.Я пытаюсь сделать это как можно меньше (без дополнительных модулей).Есть какие-нибудь асинчеры, которые могут помочь?

exports.handler = async (event) => {
    console.log(event);
    var https = require('https');

    var options = {
        method: 'HEAD',
        hostname: 'google.com',
        port: 443,
        path: '/'
    };

    try {
        var req = https.request(options, (res) => {
            console.log(res.connection.getPeerCertificate());
        });

        req.end();

    } catch (err) {
        console.error(err);
    }
};

1 Ответ

0 голосов
/ 04 июня 2018

Вы должны использовать функцию обратного вызова вашей лямбды следующим образом:

const https = require('https');

exports.handler = (event, context, callback) => {
    console.log(event);

    const options = {
        method: 'HEAD',
        hostname: 'google.com',
        port: 443,
        path: '/'
    };

    const req = https.request(options, (res) => {
        res.on('data', (d) => {
            callback(null, d);
        });
    });

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

    req.end();
}

Другим решением должно быть явное объявление обещания.

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