如何在AWS Lambda函数中获取Promise值并使用console.log打印?
问题描述
我编写了下述AWS Lambda函数,该函数返回一个Promise对象。请问如何获取该Promise的返回值,并使用console.log将其打印出来?我希望记录该Promise的值。
const https = require("https"); let url = ""; exports.handler = async function (event) { let rawData = ""; const promise = new Promise(function (resolve, reject) { https .get(url, (res) => { res.on("data", (chunk) => { rawData += chunk; }); res.on("end", function () { resolve(rawData); }); }) .on("error", (e) => { reject(Error(e)); }); }); return promise; };
解决方案
有两种常见方式可以获取Promise返回值并打印:
1. 在Lambda函数内部记录日志
因为你的handler已经声明为async函数,直接用await等待Promise完成,拿到结果后打印即可,同时不影响函数返回值:
const https = require("https"); let url = ""; // 记得替换为有效HTTPS地址 exports.handler = async function (event) { let rawData = ""; const promise = new Promise(function (resolve, reject) { https .get(url, (res) => { res.on("data", (chunk) => { rawData += chunk; }); res.on("end", function () { resolve(rawData); }); }) .on("error", (e) => { reject(Error(e)); }); }); // 等待Promise完成并获取结果 const result = await promise; // 打印到CloudWatch日志 console.log("请求返回数据:", result); // 保持原返回逻辑 return result; };
这样Lambda执行时,日志会自动输出到AWS CloudWatch中,你可以在控制台查看。
2. 外部调用handler时打印结果
如果是本地测试或其他场景调用该handler函数,可通过两种方式处理:
使用.then()链式调用
const { handler } = require("./your-lambda-file"); // 传入模拟的event参数 handler({}) .then(result => { console.log("Promise返回值:", result); }) .catch(err => { console.error("请求失败:", err); });
使用async/await语法
const { handler } = require("./your-lambda-file"); async function runTest() { try { const result = await handler({}); console.log("Promise返回值:", result); } catch (err) { console.error("请求失败:", err); } } runTest();
注意:代码中url为空字符串,实际使用时必须替换为有效的HTTPS地址,否则会触发错误回调。
内容的提问来源于stack exchange,提问作者Forbes
相关产品推荐
相关产品推荐

