我正在试验Node.AWS Lambda中的js.我遇到了下面代码的问题.结果值和错误值始终返回为空.我很确定这只是一个范围问题,我很想看到.如何捕获返回值并在响应中传回?我确信这些程序正在连接redis,因为如果我更改了端口或URL,我会收到一条错误消息,而当它们设置正确时,我不会.

返回代码:

{
  "statusCode": 200,
  "body": "{\"key\":\"q1\"}"
}

程序代码:

const Redis = require("ioredis");
const redis = new Redis(6379, 'fredflenstone.lhpxwy.az.0002.use2.cache.amazonaws.com');

exports.handler = async(event)=>{
   let key=event.key;
   let response;
   let resultValue;
   let errorValue;
   redis.get(key, (err, result) => {
      if (err) {
         errorValue=err;
      } else {
         resultValue=result;
      }
   });

   response={
      key: key,
      resultValue: resultValue,
      errorValue: errorValue
   };
   
   return {
      statusCode: 200,
      body: JSON.stringify(response)
   };
};

推荐答案

问题在于promise .处理程序的执行在redis返回结果之前完成.以下代码片段应该可以工作:

const Redis = require("ioredis");
const redis = new Redis(6379, 'fredflenstone.lhpxwy.az.0002.use2.cache.amazonaws.com');

exports.handler = async(event)=>{
   let key=event.key;
   let response;
   let resultValue;
   let errorValue;
   
   try{
       resultValue = await redis.get(key);
   }catch(error) {
       errorValue = error;
   }

   response={
      key: key,
      resultValue: resultValue,
      errorValue: errorValue
   };
   
   return {
      statusCode: 200,
      body: JSON.stringify(response)
   };
};

Node.js相关问答推荐

GraphQL MongoDB Mongoose填充字段未获取多个类别

如何呈现ejs.renderFile中包含的子模板?

我的 React + Express 应用程序不断向我的数组添加一个空对象

在 TypeScript 中正确键入 MongoDB find 方法

更新 mongodb 中的交易值

Node.js中使用ffmpeg如何获取视频截图的位置?

如何使用mongoose引用不在项目中的模型

有没有办法判断 UUID 是否是使用 node.js 中的特定命名空间生成的?

如何配置 Nginx React 和 Express

MongoDB Aggregate - 如何使用前一阶段的值作为下一阶段的字段名称?

使用 node/express/Multer,您如何首先判断参数?

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

在mongodb中只查询整数

users.watch(在 gmail google api 中)如何收听通知?

如何在 MongoDB collection.find() 上获取回调

如何使用 mocha.js 模拟用于单元测试的依赖类?

如何使用 Node.js 在服务器端管理多个 JS 文件

从 JavaScript 文件或 REPL 中 require()'ing CoffeeScript 文件

在 Node.js 中获取终端的宽度

在浏览器中打开来自 Electron 的链接