Показать сообщение отдельно
  #1 (permalink)  
Старый 27.01.2015, 20:55
Аспирант
Отправить личное сообщение для biperch Посмотреть профиль Найти все сообщения от biperch
 
Регистрация: 10.07.2013
Сообщений: 34

Перезапись переменной
Добрый день такая вот проблема.
В цикле перебираю номера сокетов и для каждого сокета получаю user_id после чего из бд достаю профиль и заполняю нужные поля.
запросы в бд выполняются асинхронно, для удобства сокет_is записываю в var new_ws_id = connectionsId[z]; после чего надеюсь его во втором вложенном калбеке использовать. Но получается что к тому времени как начинает выполнятся первый внутренний калбек, цикл проходит до конца и перезаписывает new_ws_id самым последним значением из массива.

Помогите избежать этого.

var connections_count = connectionsId.length,
                                            new_connections = [];
                                            console.log('List ws_id', connectionsId);
                                        for(var z=0; z<connections_count; z++){
                                            try {
                                                var new_ws_id = connectionsId[z];
                                                db.getIDbyWS(new_ws_id, function(new_user_id) {
                                                    
                                                    db.getUserProfile(new_user_id, function(new_profile){
                                                        new_connections.push( {
                                                                socketId        : new_ws_id,
                                                                user_id         : new_user_id,
                                                                user_first_name : new_profile.user_first_name,
                                                                user_last_name  : new_profile.user_last_name
                                                            });

                                                        if (new_connections.length==connections_count) {
                                                            // send new peer a list of all prior peers
                                                            socket.transmit('get_peers', {
                                                                connections: new_connections
                                                            });
                                                            console.log('New list ws_id', new_connections);
                                                        }
                                                    });
                                                });
                                            }catch (e){
                                                console.log('E260120151636', e);
                                            }
                                        }
Ответить с цитированием