关于异步很郁闷的问题。
发布于 10 年前 作者 mejinke 4142 次浏览 最后一次编辑是 5 年前
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页

回到顶部