异步函数中的Https.request()不会被调用

时间:2019-05-01 10:07:08

标签: node.js

我还是NodeJS的新手。我的问题是我有一个包含https.request()的“ main”函数中正在等待的异步函数,但是程序没有进入其中。

下面是我的代码的格式。

const https = require('https');

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

    var responseBody = await getNextCorrId();
    console.log(responseBody);
};

async function getNextCorrId(event){
    return new Promise((resolve, reject) => {
        const options = {
            host: 'something',
            path: 'something',
            method: 'GET',
            headers: {
                'Accept':'something',
                'Content-Type':'something',
                'Authorization': 'something'
            },
        };
        const req = https.request(options, function (res) {
            console.log("Went inside request");
            res.on('end', function () {
                var responseBody = "Well hello there";
                resolve(responseBody );
            });
        });
        req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
        });
        req.end();
    });
}

我期望console.log(responseBody)时我会得到

"Went inside request"
"Well hello there"
在控制台中

。相反,我得到了[object Promise]

1 个答案:

答案 0 :(得分:0)

在功能async之前删除关键字getNextCorrId(event)。添加async关键字会将函数的返回值包装到Promise对象中。但是,您从函数中返回了Promise,这意味着它实际上在Promise中返回了Promise。而当您await时,您仍然会得到一个承诺,即内在的承诺。更高版本的Node.js似乎已对此进行了优化,如果它们在运行时看到类似的情况,它们会自动为您解开上层Promise。