当前位置: 首页 > 知识库问答 >
问题:

如何使用deferrable执行一系列Redis操作?

虞俊美
2023-03-14

我有以下操作来使用node_redis创建用户:

server.post('/create_user', function(req, res, next) {
  console.log(req.body);
  var body = req.body;
  client.hincrby('users', 'count', 1, function(err, id) {
    client.hmset('user:'+id, 
    'username', body.username, 
    'password', body.password, 
    'email', body.email, function(err, write) { 
      client.hmget('user:'+id, 'username', 'email', function(err, read) {
        res.send({id: id, username: read[0], email: read[1]});
      });
    });
  });
})

我想在这里阅读关于可延迟和承诺的内容:http://blog.jcoglan.com/2011/03/11/Promissions-are-the-monad-of-asynchronous-programming/

如何用延迟和承诺重写代码,允许更干净的异常处理和更好的过程维护?

这些行动基本上是:

  1. 增加计数器以获取ID
  2. 设置具有ID的用户的Redis哈希
  3. 从Redis返回创建的用户

共有1个答案

朱淮晨
2023-03-14

有了你能做的承诺:

var Promise = require("bluebird");
//assume client is a redisClient
Promise.promisifyAll(client);

server.post('/create_user', function(req, res, next) {
    console.log(req.body);
    var body = req.body;
    client.hincrbyAsync('users', 'count', 1).then(function(id){
        return client.hmsetAsync(
            'user:' + id,
            'username', body.username,
            'password', body.password,
            'email', body.email
        );
    }).then(function(write){
        return client.hmgetAsync('user:'+id, 'username', 'email');
    }).then(function(read) {
        res.send({id: id, username: read[0], email: read[1]});
    }).catch(function(err){
        res.writeHead(500);
        res.end();
        console.log(err);
    });
});

这不仅比瀑布执行得更好,而且如果您有一个同步异常,您的过程不会崩溃,相反,甚至同步异常都变成承诺拒绝。虽然我非常肯定上面的代码不会抛出任何这样的异常:-)

 类似资料:
  • 问题内容: 我是SSH和JSch的新手。当我从客户端连接到服务器时,我想做两个任务: 上传文件(使用) 执行命令,例如创建目录,以及搜索MySQL数据库 目前,我正在使用两个单独的Shell登录名来执行每个任务(实际上我还没有开始对MySQL查询进行编程)。 对于上传,相关代码为 而对于我的命令 我应该在第一个频道之后断开会话,然后再打开第二个频道吗?还是完全关闭会话并打开一个新会话?如我所说,我

  • 问题内容: 我正在尝试使用HBase作为Spark的数据源。因此,第一步证明是从HBase表创建RDD。由于Spark使用hadoop输入格式,因此我可以通过创建rdd http://www.vidyasource.com/blog/Programming/Scala/Java/Data/Hadoop/Analytics/2014/01/25找到使用所有行的方法/ lighting-a-spark

  • 本文向大家介绍C# Redis学习系列(一)Redis下载安装使用,包括了C# Redis学习系列(一)Redis下载安装使用的使用技巧和注意事项,需要的朋友参考一下 下一篇:C# Redis学习系列二:Redis基本设置 一.认识Redis 1. Redis 是一个高性能的key-value数据库。 2. 它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(

  • 我使用spring-data-redis 1.0.0。

  • 我有一个需要在循环中执行的请求promise,比如: 问题是我永远不知道数组中有多少元素,所以我需要一个动态模式。有没有可能混合同步和异步世界,以便在一个时刻只有一个请求是活动的(序列不重要)?

  • 问题内容: 我使用的是在 GridFS中 存储了一个PDF文件( 大小 为 30mb) 。我能够轻松地执行插入,删除和查找操作。 数据在坚持和收藏。现在我要 更新 : 案例1:pdf文件 情况2:标题或作者 如何在GridFS中对 案例1 执行这些更新操作? 我知道我需要维护文件的多个版本并选择正确的版本。有人可以澄清一下吗? 编辑 : 我可以轻松更新元数据(标题,作者)。 问题答案: 在Grid