簡體   English   中英

無法讓AWS Lambda等待異步請求調用完成

[英]Unable to have AWS lambda wait till asynchronous request call is completed

我在理解AWS Lambda Node 8.10中的異步調用時遇到了相同/相似的問題。 下面是我的代碼。 它運行,但不是我想要的。 我正在嘗試獲取HTTPS標頭和關聯的SSL證書。 如果我運行一次lambda,則它可以成功運行,但是沒有數據。 如果我一遍又一遍地對其進行測試,則返回的返回值之一將getPeerCertificate輸出到日志。

這是我撓頭的地方...有一個定義為res的回調函數。 我相信發生的是在從request調用回調之前,lambda消失了。 我正在努力使lambda保持生存狀態,以等待請求返回。 我正在嘗試將其最小化(沒有其他模塊)。 那里有誰可以幫助您?

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

您應該這樣使用lambda的回調函數:

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

另一個解決方案應該是顯式聲明一個諾言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM