如何在AWS Lambda.invoke方法外部获取返回数据(浏览器端JS)
浏览器端AWS SDK调用Lambda后外部访问响应数据的方案
你遇到的问题本质是异步操作的执行顺序问题:lambda.invoke是异步请求,回调函数会在Lambda响应返回后才执行,而外部代码会先于回调运行,所以直接在外部定义变量接收data是拿不到的。下面是两种可行的解决方法:
方法1:将数据处理逻辑放在回调函数内部
最直接的方式是把所有需要用到Lambda响应数据的代码,都写在回调函数里,或者调用专门的处理函数:
// Initialize the Amazon Cognito credentials provider. const params = { FunctionName: 'LambdaFunctionName', InvocationType: "RequestResponse", }; lambda.invoke(params, function (err, data){ if (err) { console.log(err, err.stack); // 处理错误 } else { // 在这里直接处理数据,或者调用外部函数 handleLambdaData(data); } }); // 专门处理响应数据的函数 function handleLambdaData(data) { console.log(data); // 比如更新页面内容、存储到本地存储等操作都可以在这里写 }
方法2:用Promise+async/await改写(更易读的异步写法)
AWS SDK的异步方法支持转换为Promise形式,结合async/await可以让代码看起来像同步逻辑,更易维护:
// Initialize the Amazon Cognito credentials provider. const params = { FunctionName: 'LambdaFunctionName', InvocationType: "RequestResponse", }; // 用async函数包裹异步操作 async function fetchLambdaData() { try { // 调用invoke的promise()方法,用await等待响应 const data = await lambda.invoke(params).promise(); // 这里可以直接使用data console.log(data); handleLambdaData(data); } catch (err) { console.log(err, err.stack); // 捕获错误 } } // 执行函数 fetchLambdaData(); function handleLambdaData(data) { // 数据处理逻辑 }
注意:浏览器端JavaScript的异步操作必须等待请求完成后才能获取数据,不能在lambda.invoke调用后直接写代码访问data,因为此时请求还没结束。
内容的提问来源于stack exchange,提问作者heisenberg
相关产品推荐
相关产品推荐

