关于异步很郁闷的问题。
exports.sendNewMessageTips = function(uid, friends, socket){
for(var i=0; i<friends.length; i++){
mem.get('CHAT_Message_'+friends[i].id+'_'+uid, function(e,r){
if(!e && r){
socket.emit('sendNewMessageTips', friends[i].id);
}
});
}
}
上面个方法里,我是循环好友列表,拿每个好友的ID去memcache缓存数据库查询下,如果有资料,就发送一个socket通知,可 socket.emit(‘sendNewMessageTips’, friends[i].id); 这里的 friends[i].id 总是为undefined ,我知道,下面是一个单独的函数,那有什么办法可以实现我要的效果?
9 回复
用闭包可以轻松解决~
exports.sendNewMessageTips = function(uid, friends, socket){
for(var i=0; i<friends.length; i++){
(function(i) {
mem.get('CHAT_Message_'+friends[i].id+'_'+uid, function(e,r){
if(!e && r){
socket.emit('sendNewMessageTips', friends[i].id);
}
});
})(i);
}
建立一个闭包就好了,
谢谢你们,终于解决了。呵呵。
不要用
for(var i=0; i<friends.length; i++)
用
friends.forEach(function(item) {
});
嗯。forEach 我去试试。
新手 资讯下, forEach 的相对优势在哪里 ? 书写方便吗?
@jonzlx 就是可以避免這個帖子的問題啊
@byvoid 我的意识是和 闭包的区别, 微博上面问过你了, 书上 137页