私はES5の新しいArray.forEach()を使っています。私は各項目のコールバックが並行して実行されるべきだと考えています。私はすべての値が処理された後に関数を返すようにしたいと思います。すべてのコールバックが発射される前にparent_functionが終了してもよいので:ES5:forEachですべてのアイテムがコールバックされたら親関数を返す
// I'd like to make parent_function return a new array with the changed items.
function parent_function(array_of_things) {
new_array = []
array_of_things.forEach(function(thing) {
new_array.push('New '+thing)
if (new_array.length === array_of_things.length) {
// OK we've processed all the items. How do I make parent_function return the completed new_array?
return new_array
}
})
}
は、私は、これは間違ったアプローチであってもよいと思われます。この場合、カスタムイベント(すべてのアイテムを処理した後にデータを生成する必要があるもの)が発生するが最適なアプローチです。しかし、私はMDCのドキュメントでそのことについて言及していませんでした。
しかし、私はかなりJSに新しいですし、確認するためにいくつかのピアレビューが大好きです!
編集:forEach()は結局同期しているように見えます。私は後で結果の配列を記録していて、矛盾した結果を見ていました。時には2つの項目、時には4つの項目などがありました。これを読んで、同様の動作をしている場合は、このitem about issues in Chrome's array loggingを読むことをお勧めします。
Heheありがとう。私はちょうど他の奇妙な行動のために非同期を仮定したと思う。 http://ecma262-5.com/ELS5_HTML.htm#Section_15.4.4.18には、同期の動作が記述されています。 – mikemaccana