Cómo llamar a una función ajax en un bucle for [duplicado]

Esta pregunta ya tiene una respuesta aquí:

JavaScript cierre dentro de bucles - ejemplo práctico simple 39 respuestas

Soy nuevo en ajax y JavaScript. Lo que intento hacer es llamar a una función ajax varias veces para obtener ciertos datos de un recurso y luego "insertar" todos los datos en una matriz para que pueda usarlos más adelante en el código. Aquí está mi código.

var arr = [];
var users = ["brunofin", "comster404", "ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];

for (i = 0; i < users.length; i++) {
    $.ajax({
        url: "https://api.twitch.tv/kraken/streams/" + users[i],
        success: function(data) {
            arr.push(data);
        },
        error: function(data) {
            arr.push("blank");
        },
        complete: function() {
            if (i == users.length) {
                console.log(arr); //This seem to print even when the condition isn't true
            }
        }
    });
}

l problema con el código es que se imprime en la consola incluso cuandoi no es igual ausers.length

Mi pregunta es; ¿Cómo me aseguro de que espere hastai == users.length es cierto antes de imprimir en la consola? Tenga en cuenta que todavía deseo que el proceso sea asíncrono.