Como chamar uma função ajax em um loop for [duplicado]

Esta pergunta já tem uma resposta aqui:

JavaScript encerramento dentro de loops - exemplo prático simples 39 respostas

Eu sou novo no ajax e no JavaScript. O que estou tentando fazer é chamar uma função ajax várias vezes para buscar determinados dados de um recurso e, em seguida, "enviar" todos os dados para uma matriz, para que eu possa usá-los posteriormente no código. Aqui está o meu 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
            }
        }
    });
}

O problema com o código é que ele é impresso no console mesmo quandoi não é igual ausers.length

Minha pergunta é; como garantir que aguarde atéi == users.length é verdadeiro antes de imprimir no console? Lembre-se de que ainda desejo que o processo seja assíncron