javascript - 无法从 Lambda 函数中的 Promise 接收/发送响应
问题描述
我有一个 Lambda 函数,其中我从查询字符串中获取一个参数并使用它来调用一个下游服务,该服务将返回一个承诺。我无法发回 Promise 收到的响应。
这是我的 Lambda 函数:
export const handler = async (event) => {
let sessionId = event.queryStringParameters.sessionId;
const testClient = new Client.WebStoreClient(config);
const sessionResponse = getSession(testClient, sessionId);
sessionResponse.then(function (result) {
console.log(result);
});
const response = {
statusCode: 200,
body: JSON.stringify(sessionResponse),
};
return response;
};
async function getSession(testClient, sessionId) {
let data = await testClient.getSession(sessionId, headers)
.then((response) => response.body);
return data;
}
当我执行此操作时,我得到一个空响应:{ statusCode: 200, body: '{}' }
来自 Lambda 函数输出。我试图控制台记录我得到的值并收到这个:Promise { <pending> }
我怀疑这是一个 Javascript/Typescript Promise 问题,我稍微忽略了它。任何帮助在这里表示赞赏。提前致谢。
解决方案
在您的response
中,您试图将 promise 字符串化而不是 promise 值,它为您提供了一个空对象作为字符串。
你可以试试看:
JSON.stringify(Promise.resolve(1)) // output is "{}"
您只能从传递给的回调内部访问 Promise 的值then
。
可以这样想:里面then
是未来,周围的代码是现在。您现在无法引用未来的数据。
你可能想写
return sessionResponse.then(function (result) {
return {
statusCode: 200,
body: JSON.stringify(result),
}
});
以上返回包含您的响应的承诺。
你也可以这样getSession
写
function getSession(testClient, sessionId) {
return testClient.getSession(sessionId, headers)
.then((response) => response.body);
}
我建议你练习使用没有 async/await 的 Promise
推荐阅读
- r - 根据闪亮应用程序中的条件隐藏 helptext()
- azure-service-fabric - “ISomeService”类型不是服务接口,因为它不是从接口“INonServiceFabricService”派生的
- python - 在 Python 中使用嵌套的 while 循环确定素数
- javascript - 来自 PHP 的 500 内部服务器错误 - 将数据插入 VFP9 数据库
- laravel - 为什么 Laravel dd 只显示两个级别?
- javascript - React Router VS 条件渲染
- c# - C# main 函数是无效的
- python - 使用 pandas 单元格作为键
- ios - 快速注销功能
- amazon-web-services - AWS Lambda - 如何识别重复消息