javascript - Redis Node 如何在函数async/await中返回True

标签 javascript node.js async-await node-redis

请原谅我的问题。 我不习惯 Node 和同步/等待

我有以下函数,它查询 mongodb 返回 json,我将该返回保存在 Redis 上。 到目前为止一切顺利。

findLightnings: async (request, h) => {
    const q = request.query.q.split(':');
    const index = q[0];
    const value = q[1].split(',');

    const dateInit = new Date(request.query.dateInit);
    const dateEnd = new Date(request.query.dateEnd);
    const page = request.query.page;
    const distance = request.query.distance;
    const redis = require('redis');
    const client = redis.createClient();

    let limit = 300;

    let filter = {
      $and: [{
        data: {
          $gte: dateInit.toISOString(),
          $lte: dateEnd.toISOString()
        }
      }]
    }

    if (index === 'latlng') {
      filter['$and'][0]['geo.coordinates'] = {
        $near: {
          $geometry: {
            type: 'Point',
            coordinates: value.map(Number),
            $minDistance: 0,
            $maxDistance: distance
          }
        }
      }
      limit = 100;
    } else {
      filter['$and'][0][`cidade.${index}`] = {
        $in: value
      }
    }

    return client.get('elektro', async (err, reply) => {
    let resp = null;

    if (reply) {
        console.log(reply); //<<<<<<<< Return Json OK
        resp = reply // <<<<<<<<<< Return TRUE in json's place
    } else {
        console.log('db')
        const query = await Lightning.find(filter).sort('data').skip(page*limit).limit(limit).exec();
        client.set('elektro', JSON.stringify(query));
        client.expire('elektro', 3600);
        resp = query
    }

    return JSON.stringify(resp);
  })
  }

问题是从 Redis 恢复这些数据的时间。 在控制台日志中,json显示正常,有多少tento返回主函数的值,它是“TRUE”,而不是保存在redis中的json。

有人可以帮我解决这个问题。 我真的很需要这个功能。

最佳答案

const redis = require('redis');

const client = redis.createClient(6379);

const bluebird = require("bluebird");

bluebird.promisifyAll(redis.RedisClient.prototype);

bluebird.promisifyAll(redis.Multi.prototype);

const redisdata = await client.getAsync("user:photos");

if (redisdata) {

        console.log(`cache EXISTS`)

        return res.json({ source: 'cache', data: JSON.parse(redisdata) })

    } 

关于javascript - Redis Node 如何在函数async/await中返回True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202396/

相关文章:

javascript - 使用 nw.Window.open() 打开的 nw.js 窗口中的 "Uncaught ReferenceError: require is not defined"

node.js - 无法使用 map() 和 async-await 将项目推送到数组

javascript - 从 setTimeout 函数中返回值

javascript - 如何在html静态页面上创建模态表单以将用户存储在rails中

javascript - RegExp : Match '3' words of a list, 不重复

c# - 异步方法不调用

c# - Async await 关键字是否等同于 ContinueWith lambda?

javascript - 尝试在 SharePoint 环境中使用 AngularJS DateRangePicker 时出现未定义错误

javascript - 可靠地使用 Node watchFile - nfs、cifs、scp?

node.js - 在某些情况下,我可以永远阻止重新启动我的 Node 脚本吗?