跳到主要内容
CNode

关于异步很郁闷的问题。

社区
Mmejinke发布于 14 年前最后回复 14 年前
957020
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)

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

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

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

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

B
byvoid#514 年前

不要用

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

friends.forEach(function(item) {
});
M
mejinke#414 年前

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

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

建立一个闭包就好了,

D
DoubleSpout#214 年前

用闭包可以轻松解决~

参与回复

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