CNode

关于异步很郁闷的问题。

Mmejinke发布于14 年前最后回复14 年前9 回复5669 浏览0 收藏
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)

D
DoubleSpout#1·14 年前

用闭包可以轻松解决~

L
luinlee#2·14 年前
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);
}

建立一个闭包就好了,

M
mejinke#3·14 年前

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

B
byvoid#4·14 年前

不要用

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

friends.forEach(function(item) {
});
B
byvoid#6·14 年前
J
jonzlx#7·14 年前
引用 byvoid不要用 for(var i=0; i<friends.length; i++) 用 friends.forEach(function(item) { });

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

S
sumory#8·14 年前
J
jonzlx#9·14 年前
引用 byvoid不要用 for(var i=0; i<friends.length; i++) 用 friends.forEach(function(item) { });

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

参与回复
登录后即可参与回复。登录