私がそれを正しく理解しているなら、あなたはこのようなことをしたいと思うでしょう:
var positions = this.getPositions(function(positions) {
console.log(positions[0]);
});
つまり、「getPositions」は、位置が正常にロードされたときに呼び出され、位置配列が渡される単一のコールバックパラメーターを受け入れるように記述します。 getPositionsで 位置がすでにロードされているかどうかを確認し、ロードされている場合は、コールバックを直接呼び出すことができます。それ以外の場合は、コールバックのキューに追加します(例:this.positionsLoadedCallbacks )、すべての位置がロードされた後に反復します(これはloadのどこかにあると思います me.orderPositions()の近くの関数 。
たとえば、getPositions 関数は次のようになります:
getPositions : function(callback) {
if(this.positions !== null) {
callback(this.positions);
return;
}
this.positionsLoadedCallbacks.push(callback);
},
位置がロードされたことを確認した後(つまり、loadJSON成功コールバック内)のどこかに、次のようなものを配置する必要があります:
for(var i=0; i < this.positionsLoadedCallbacks.length; i++) {
this.positionsLoadedCallbacks[i](this.positions);
}
そして、this.positionsLoadedCallbacksを初期化することを忘れないでください :)
console.logトリビア
console.log(positions)が 動作し、console.log(positions[0]) 簡単ではありません。オブジェクト参照をconsole.logに渡す場合 、小さな「展開」矢印をクリックして内部を確認すると、オブジェクトが検査されます。 オブジェクト/配列。もちろん、その矢印をクリックするまでに、位置はロードされています。ただし、特定の配列要素(positions[0]など)を渡す場合 )その値を直接調べて、まだundefinedであることがわかります。 、その結果をコンソールに記録します。
自分で試してみてください:
var i = [];
console.log([i]);
i.push(123);
前のスニペットはクロム24で、[Array[0]]を示しています コンソールに表示されますが、展開すると、配列がlength: 1であることがわかります。 その最初の要素は123です