Добрый день такая вот проблема.
В цикле перебираю номера сокетов и для каждого сокета получаю 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);
}
}