私がそれを正しく理解しているなら、あなたはこのようなことをしたいと思うでしょう:
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
です