buenas...
no he podido interpretar bien todo el código pero se me ocurre que puede ser el problema clásico de los bucles y los eventos asíncronos. recuerda que la mayoría de los componentes en nodejs son asíncronos. a esto sumale que javascript es
late-binding. lo que más o menos quiere decir que javascript obtiene los valores al momento de invocarlos. de modo que si esa variable cambia, eventualmente se reflejará. tienes que hacer una especie de bind con closure porque creo que con
bind no te funcionará.
básicamente en el bucle creas una función a la que le pasas como argumento el iterador y dentro de esta función utilizas ese argumento para los callbacks.