我正在试验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相关问答推荐

如何在Mongoose for MongoDB中编写此查询

构建期间 Docker 容器中的 npm 安装失败

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

如何设置 Puppeteer Select 器的唯一性?

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

发布请求不使用 Nodejs 更新 MongoDB 中的标头信息

找不到模块bcryptjs

如何使用 Remix 仅在客户端呈现组件?

Mongodb聚合传递一个匹配的数组和一个不匹配的数组

使用 .pipe(res) 向客户端发送音频不允许您搜索?

后端位于 Docker 容器中时的 SvelteKit SSR fetch()

node.js 是否支持yields ?

mongoose 模式中的嵌套对象

错误:大多数中间件(如 bodyParser)不再与 Express Bundle

如何在不全局安装的情况下在 Node REPL 中要求 node 模块?

TypeError:请求路径包含未转义的字符,我该如何解决这个问题

使用 node 的内置调试器判断变量?

从 React(同构应用程序)进行 API 调用时出现Access-Control-Allow-Origin问题

Node.js 与 .net 中的异步/等待

Firestore:多个条件 where 子句