Se eu entendi corretamente, você vai querer fazer algo assim:
var positions = this.getPositions(function(positions) {
console.log(positions[0]);
});
Ou seja, você desejará escrever "getPositions" de forma que ele aceite um único parâmetro de retorno de chamada que seja invocado assim que as posições forem carregadas com sucesso e for passado para o array de posições. Em
getPositions
você pode verificar se as posições já foram carregadas e, em caso afirmativo, invocar diretamente o retorno de chamada. Caso contrário, você os adicionará a uma fila de retornos de chamada (por exemplo, this.positionsLoadedCallbacks
), através do qual você itera após todas as posições terem sido carregadas (acho que isso estaria em algum lugar em seu load
função perto de me.orderPositions()
). Por exemplo, seu
getPositions
função pode ficar assim:getPositions : function(callback) {
if(this.positions !== null) {
callback(this.positions);
return;
}
this.positionsLoadedCallbacks.push(callback);
},
Em algum lugar depois de ter certeza de que as posições foram carregadas (ou seja, no retorno de chamada loadJSON de sucesso), você precisará colocar algo assim:
for(var i=0; i < this.positionsLoadedCallbacks.length; i++) {
this.positionsLoadedCallbacks[i](this.positions);
}
E não se esqueça de inicializar
this.positionsLoadedCallbacks
:) trivia do console.log
O motivo pelo qual
console.log(positions)
funciona e console.log(positions[0])
não é fácil:se você passar uma referência de objeto para console.log
, o objeto será inspecionado quando você clicar na pequena seta "expandir" e tentar dar uma olhada dentro o objeto/matriz. No momento em que você clicar nessa seta, as posições foram carregadas, é claro. No entanto, se você passar um elemento de array específico (por exemplo, positions[0]
) ele tentará diretamente procurar esse valor, descobrir que ainda está undefined
e registre esse resultado no console. Tente você mesmo:
var i = [];
console.log([i]);
i.push(123);
O snippet anterior, no chrome 24, mostra
[Array[0]]
no console, mas quando eu o expando, ele me diz que o array como length: 1
e que seu primeiro elemento é 123