簡體   English   中英

使用NODE JS和BLUEBIRD從REDIS獲取數據

[英]Fetching data from REDIS with NODE JS and BLUEBIRD

我正在嘗試獲取特定鍵模式的所有條目,並使回調整齊地進行,我正在使用Bluebird。 nodejs的redis客戶端是項目的node_redis。

Redis客戶端中的代碼是-

    exports.getAllRedisKeysA = function() {
  var res = rclient.keysAsync("client*").then(function(data) {
    // console.log(data);
  }).then(function(data) {
    var arrayResp = [];
    for (var element in data) {
      rclient.hgetallAsync(element).then(function(data) {
        arrayResp.push(data);
      });
    };
    return arrayResp;
    //  console.log(data);
  }).catch(console.log.bind(console));
  console.log(res); // gives an empty promise.
  return res;
}

並且此函數是通過以下方式從控制器調用的:

var abc = rdata.getAllRedisKeysA();
// console.log(abc); // gives undefined

redis函數內部的console.log輸出給出了一個空的承諾,並且沒有任何內容返回給控制器。

我在實現中缺少任何內容嗎?

萊納斯(Linus)賈羅曼達(Jaromanda )對這個問題的一些真正有用的評論,幫助我朝着正確的方向前進。 我使用下面的方法使用BlueBird Promise從REDIS中獲取所需的數據,這是完成此操作的方法。

下面的代碼從REDIS獲取所需的數據

exports.getRedisKeyPattern = function(pattern){

var allKeys = allKeysPattern(pattern).then(function(data){
  var arrayResp = [];
  var inptArr = [];
  var newdata = data.slice(1)[0];
  for(var i in newdata){
    inptArr.push(newdata[i]);
  };
  return new Promise.resolve(inptArr);
});

var valuePerKey = Promise.mapSeries(allKeys, function(dt){
  return getAllKeyContents(dt);
}).then(function(res){
  return res;
}).catch(function(err) { console.log("Argh, broken: " + err.message);
});

return new Promise.resolve(valuePerKey);
}

function getAllKeyContents(key){
  var data =  rclient.hgetallAsync(key).then(function(data){
      return data;
  }).catch(function(err) { console.log("Argh, broken: " + err.message); });

  var res = Promise.join(data, key, function(data, key){
      return {
          key: key,
          data: data
      };
    });

  return res;
}

在控制器中,該函數的調用方式如下:

var rdata = require('../../components/redis/redis-functions');
rdata.getRedisKeyPattern("clients*").then(function(response){
      return res.status(200).json(response);
    });

包含redis函數的.js文件包含在控制器文件中,以便可以使用這些函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM