从 NodeJS 中的回调函数返回值用于 Redis

时间:2021-07-22 15:41:19

标签: javascript node.js express

我试图在回调函数中从 redis 返回一个列表,但我做的事情不对,这是以下函数:

public get = () =>
    CoreHelpers.controller("get.alerts", async() => {
      let returnVal: [] = []

      rangeReturn(function(obj:any){
        returnVal = obj.map((x:any) => JSON.parse(x))
        console.log(returnVal) <--- works here
      }, returnVal)

      //Returns the list of the given ticker
      function rangeReturn(callback: any, returnVal: any) {
        RedisClients.client0.lrange("alerts", 0, -1, (err, reply) => {
          if (!err) {
            callback(reply, returnVal);
          } else {
            console.log("Error within client.lrange in Quandl.js");
          }
        });
      }

      console.log(returnVal) <--- doesnt work here
      return returnVal
      
    });

似乎即使我在函数调用之外声明了 returnVal 并传入了它没有返回的数据。我假设是因为 rangeReturn 在解析数据之前没有完成?但是我该如何正确格式化它呢?谢谢!

1 个答案:

答案 0 :(得分:0)

这是您将 Promise 构造函数与 resolve/reject 回调一起使用的地方:

CoreHelpers.controller("get.alerts", async () => {

    const promise = new Promise((resolve, reject) => {
        RedisClients.client0.lrange("alerts", 0, -1, (err, reply) => {
            if (!err) {
                resolve(reply);
            } else {
                reject(err);
            }
        });
    });

    return promise.then(value => {
        // If you want to modify the value first
        return value.map((x: any) => JSON.parse(x));
    });
});