猿问

请教关于node异步循环的问题

代码很简单,如下:
varfind;
data.some(function(ip){
client.sismember(url+':ip',ip,function(err,mem){
!mem&&(find=ip);
console.log('redis:'+find);
});
console.log(find);
returnfind;
});
原理很简单:
我先some循环一个IP数组
如果数组中的IP不存在redis中,我就将find赋值为当前IP
如果循环过程中找到了IP,我就跳出循环,不再一直查询redis
结果,代码中有两个console:
先循环数组数据,find一直是undefined,因此不会跳出循环
之后执行所有redis查询结果,并重复给find复制,并打印出来
问题:
首先结果不是我想要的
效率差,我循环100条就查询100次redis
请问如何解决?
交互式爱情
浏览 338回答 2
2回答

翻阅古今

安装万能的async:sudonpminstallasync把代码改成:varasync=require('async');...async.detect(data,function(ip,cb){client.sismember(url+':ip',ip,function(err,mem){console.log('redis:'+find);cb(!mem);});},function(result){find=result;console.log(find);});可以看下github上async的文档。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答