我试图用下面的代码执行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', 1),
client.hincrby("traffic:" + siteId, '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,但我不明白它为什么要使用该方法应用于它?
我可以通过向client.hincrby添加一个函数(err,结果)作为最后一个元素来获得增量的结果。但是,如何在结束函数中的结果变量中得到所有的结果?
发布于 2013-04-02 08:55:03
我想您使用的异步is模块是在:https://github.com/fjakobs/async.js中记录的。
在您的代码中:
您得到了"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()代替调用(),使用toArray()代替end()。
https://stackoverflow.com/questions/15748616
复制相似问题