Node.js触发事件发HTTP请求时高阶函数内console输出失效
问题原因
async类型的handler函数会在http请求的回调执行完成前就提前返回,运行环境会在函数返回后直接暂停执行上下文,不会等待异步回调逻辑跑完,因此回调里的console语句没有触发机会。
修复代码
把http请求封装为Promise,用await等待请求完整执行后再返回:
const https = require('https'); exports.handler = async (event) => { // 封装HTTP请求为Promise const fetchData = new Promise((resolve, reject) => { https.get('https://test.com', (res) => { console.log('statusCode:', res.statusCode); console.log('headers:', res.headers); let data = ""; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { const parsedUrl = JSON.parse(data); console.log(parsedUrl); resolve(parsedUrl); }); }).on('error', (err) => { console.error(err); reject(err); }); }); // 等待请求执行完成再返回 await fetchData; return 0; };
注意事项
- 原代码直接打印整个res对象会输出大量冗余内容,改为打印res.statusCode更合理
- 该方案同时适用于Serverless环境和本地Node.js运行场景
内容的提问来源于stack exchange,提问作者Truut
相关产品推荐
相关产品推荐

