微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

异步执行Redis命令

如何解决异步执行Redis命令

我想您使用的asyncjs模块是在以下位置记录的模块:https ://github.com/fjakobs/async.js

在您的代码中:

  • list()是一个生成器。它允许数组由asyncjs进行迭代。该数组是值的数组。
  • call()是一个 每个项目的映射器。因此,这些项必须是可调用的(即,它们必须是回调)。
  • end()是终止终点,当迭代结束时调用。作为参数,您只能获取序列的最后一个值(而不是整个序列)。

您收到“ [TypeError:Object true没有方法’apply’]错误,因为您建立的列表不是回调列表。它是值列表。

这是一些应该执行您想要的代码

var redis = require("redis");
var client = redis.createClient();
var async = require("asyncjs");

function main() {

  var siteId = 1;

  async
    .list(['x','y','z'])
    .map( function (item,next) {
      client.hincrby('traffic:' + siteId, item, 1, function (err,res) {
        next(err,res)
      })
    })
    .toArray( function(err,res) {
      console.log(err); 
      console.log(res); 
    });
}

main()

请注意,这里我们使用map()代替call(),并使用toArray()代替end()。

解决方法

我正在尝试使用以下代码执行Redis的几种异步方法

var redis = require("redis");
var client = redis.createClient();
var async = require("asyncjs");

   async.list([
        client.hincrby("traffic:" + siteId,'x',1),client.hincrby("traffic:" + siteId,'y','z',1)
    ]).call().end(function(err,result)
    {
        console.log(err); // returns error [TypeError: Object true has no method 'apply']
        console.log(result); // undefined
        if(err) return false;
        return result;
    });

所有方法成功执行

但是我得到了错误 [TypeError: Object true has no method 'apply']

该方法被执行并返回true,它可能将其解释为true,但是我不明白为什么它必须使用该方法应用于它?

我可以通过将一个函数(err,结果)作为最后一个元素添加到client.hincrby中来获得增量的结果。但是,如何在end函数的result变量中获得所有结果呢?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。