Javascript redis命令的异步执行
我试图用以下代码执行redis的几个异步方法Javascript redis命令的异步执行,javascript,asynchronous,redis,Javascript,Asynchronous,Redis,我试图用以下代码执行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),
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;
});
所有方法都成功执行
但是我得到了错误[类型错误:Object true没有方法'apply']
该方法被执行并返回true,它可能会将其解释为true,但我不明白为什么它必须对其应用该方法
我可以通过向client.hincrby添加一个函数(err,result)作为最后一个元素来获得增量的结果。。但是如何在end函数的result变量中获得所有结果呢?我想您使用的asyncjs模块就是记录在以下位置的模块: 在代码中:
- list()是一个生成器。它允许asyncjs对数组进行迭代。数组是一个值数组
- call()是一个映射器,调用每个项目。因此,项目必须是可调用的(即,它们必须是回调)
- end()是一个终止点,在迭代结束时调用。作为参数,您只获得序列的最后一个值(而不是整个序列)
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()。我想您使用的asyncjs模块就是记录在以下位置的模块: 在代码中:
- list()是一个生成器。它允许asyncjs对数组进行迭代。数组是一个值数组
- call()是一个映射器,调用每个项目。因此,项目必须是可调用的(即,它们必须是回调)
- end()是一个终止点,在迭代结束时调用。作为参数,您只获得序列的最后一个值(而不是整个序列)
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()。有人重新定义了console对象吗?我不明白你的意思?我不知道关于
redis
,但我看到过有人重新定义console(特别是console.log)以提供不同功能的示例代码。可能在这里发生了这种情况,并且您的console.log(本地)实现需要一个具有“apply”方法的输入对象?嗯,不,这不应该是问题所在。。我并没有凌驾于我所知道的任何事情之上。。我认为它必须使用“end”函数做一些事情,因为所有操作都会成功执行。。谢谢你!有没有什么东西重新定义了console对象?我不明白你的意思?我不知道任何关于redis
,但我看到过一些示例代码,其中有人重新定义console(&特别是console.log)以提供不同的功能。可能在这里发生了这种情况,并且您的console.log(本地)实现需要一个具有“apply”方法的输入对象?嗯,不,这不应该是问题所在。。我并没有凌驾于我所知道的任何事情之上。。我认为它必须使用“end”函数做一些事情,因为所有操作都会成功执行。。谢谢你!是的,这很有效!我已经用一些额外的代码修复了它,但这就是我要搜索的。谢谢是的,这很有效!我已经用一些额外的代码修复了它,但这就是我要搜索的。谢谢