Async chama com resposta assíncrona no NodeJS

Estou construindo meu primeiro projeto com o NodeJS atualmente, mas estou um pouco confuso em uma tarefa que acredito ser simples, acho que o problema é minha falta de conhecimento dessa abordagem assíncrona, mas não consigo encontrar a resposta em nenhum lugar .

Eu tenho um loop simples que itera sobre uma matriz e, para qualquer elemento, com base em alguma regra, chamarei uma função ou outra. Agora, algumas operações serão mais rápidas que outras, para que eu possa terminar com uma função no elemento N retornando mais cedo que a função no elemento N-1. Para simplificar algo como isto

for (var i = 0 ; i < 10 ; i++) {
      if (i%2 === 0) {
          setTimeout(function(i) {
               console.log(i);
          }, 2000);
      }
      else { console.log(i); }
}

para qualquer número par será impresso com um atraso de 2 segundos, enquanto os números ímpares serão impressos imediatamente. De qualquer forma, eu recebo

1
3
5
7
9

<<2 seconds break>>

undefined
undefined
undefined
undefined
undefined

parece que o valor par está "perdido". Como posso passar o valor para garantir que a função não perca o valor de entrada? Estou esquecendo de algo

brigado, Mauro

questionAnswers(3)

yourAnswerToTheQuestion