关于异步很郁闷的问题。
 发布于 13 年前  作者 mejinke  5516 次预览  最后一次回复是 13 年前  来自  
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 回复
DoubleSpout

用闭包可以轻松解决~

luinlee
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);
}

建立一个闭包就好了,

mejinke

谢谢你们,终于解决了。呵呵。

byvoid

不要用

for(var i=0; i<friends.length; i++)

friends.forEach(function(item) {
});
mejinke

嗯。forEach 我去试试。

jonzlx

新手 资讯下, forEach 的相对优势在哪里 ? 书写方便吗?

byvoid

@jonzlx 就是可以避免這個帖子的問題啊

jonzlx

@byvoid 我的意识是和 闭包的区别, 微博上面问过你了, 书上 137页