私のコードは、クロムである種の量子決闘状態をもたらしundefined
、配列にプッシュされると関数が変化する宇宙を呼び出しているようです...不気味です
この関数を使用してそれらをコールバックチェーンするために、次のコードを使用して関数の配列を構築していますhttps://gist.github.com/3609831
console.log "creating stack"
ids = (id for id of @s3) # an array of integers
stack = [callback]
console.log stack
for ssid of @s3
new_func = ((cb) => @idb.load_s3(ssids.shift(),cb))
console.log new_func
stack.push new_func
console.log stack
console.log "stack done"
奇妙なのは、実際には機能しているように見えますが、正しい引数を使用したすべての関数呼び出しが行われているようですが、コンソールでもこれを取得します(私のフォーマットとコメントを使用)
> creating stack
# callback added to array correctly
> [function () { return _this.start(true); }]
# function generated correctly
> function (cb) { return _this.idb.load_s3(ssids.shift(), cb); }
# but the function doesn't get added to the array !!!!!!!
> [function () { return _this.start(true); }, undefined × 1]
> stack done
# and the undefined from the array can't be executed of course, verified my line number
> Uncaught TypeError: undefined is not a function
これは、機能したものの...機能しなかったことを意味しているようです...なぜなら...配列にプッシュされるとnew_funcが未定義に変わるからです...
WTF ???
ここで何が起こっているのか、誰か手がかりがありますか?
私はクロームv21を使用しています
..。
編集:fyi @ idb.load_s3関数はスコープ内にあり、これの一部が壊れている場合はロードされないindexedDBからデータをロードするため(そしてコールバックが起動するため)、機能していることがわかります。
..。
EDIT2:これがjavascriptです。これについては、まったく違いや奇妙なことは何もありません。読みにくいだけです。
var id, ids, new_func, ssid, stack,
_this = this;
console.log("creating stack");
ids = (function() {
var _results;
_results = [];
for (id in this.s3) {
_results.push(id);
}
return _results;
}).call(this);
stack = [callback];
console.log(stack);
for (ssid in this.s3) {
new_func = (function(cb) {
return _this.idb.load_s3(ssids.shift(), cb);
});
console.log(new_func);
stack.push(new_func);
console.log(stack);
}
console.log("stack done");
..。
編集3:問題の一部は、Chromeのコンソールがおそらく非同期であるため、console.logの呼び出し後、console.logが実際に出力される前に、最後のアイテムがスタックからポップされたように見えることに気づきました(コードはここには示されていません)。アレイの内容!!! したがって、スタックを実行するために関数(参照されている要点を参照)を呼び出さない場合、残りは正常に機能しているように見えます。
ただし、これは、未定義が関数ではないこと(配列から未定義をポップして実行しようとしているなど)について不平を言う例外の謎を解決しません...それでも奇妙です!
..。
編集#4:load_s3関数はここにあります:https ://github.com/gnatters/neuroanatomist/blob/master/app/assets/jax/models/asset_loader.js.coffee.erb#L118 実際のバージョンのコードここで質問されるのは、#L145のload_everythingの同じファイルにあります