【问题标题】:Using node js and redis - get readable code使用 node js 和 redis - 获取可读代码
【发布时间】:2012-03-13 01:52:31
【问题描述】:

可能这是一个简单而愚蠢的问题,但我刚刚学习了我的第一个异步服务器语言,redis 是我的第一个键值数据库。

示例。我需要这样做:

$x = users:count
get user:$x

但是使用异步 javascript 我得到了这段代码

redis-cli.get('users:count', function(err, repl){
  if(err){
    errorHandler(err);
  } else {
    redis-cli.get('user:'+repl, function(err, repl){
      if(err){
        errorHandler(err);
      } else {
        console.log('We get user '+repl+'!')
      }
    })
  }
})

这段代码不是很大,也没有太多嵌套,但它看起来像在我的第一个示例/测试项目中,我得到了疯狂的嵌套函数回调。

如何解决这个问题并制作漂亮可读的代码?

【问题讨论】:

标签: javascript node.js nosql redis key-value


【解决方案1】:
function getUserCount(callback, err, repl) {
  if (err) {
    return callback(err);
  }
  redis-cli.get('user:' + repl, getUser.bind(null, callback));
}

function getUser(callback, err, repl) {
  if (err) {
    return callback(err);
  }
  console.log('We get user ' + repl + '!');
}

redis-cli.get('users:count', getUserCount.bind(null, errorHandler));

bind 创造奇迹。如果您更喜欢抽象绑定,那么您可以使用this 来存储通常存储在闭包中的状态,例如:

require("underscore").bindAll({
  run: function (errorHandler) {
    this.errorHandler = errorHandler;
    redis-cli.get('users:count', this.getUserCount);
  },
  getUserCount: function (err, repl) {
    if (err) return this.errorHandler(err);
    redis-cli.get('user:' + repl, this.getUser);
  },
  getUser: function (err, repl) {
    if (err) return this.errorHandler(err);
    console.log('got user ', repl);
  }
}).run(errorHandler);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2016-05-25
    • 1970-01-01
    • 2013-01-03
    • 2013-05-14
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多