ES5の新しいArray.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
}
})
}
これは間違ったアプローチである可能性があります。すべてのコールバックが発生する前にparent_functionが終了する可能性があるためです。この場合、カスタムイベント(すべてのアイテムを処理した後に生成されたデータを必要とするものによって処理される)を発生させることが最善のアプローチである可能性があります。ただし、MDCドキュメントでそのことについての言及は見つかりませんでした。
しかし、私はJSにかなり慣れていないので、確認のためにピアレビューをしたいと思います。
編集:forEach()は結局同期しているように見えます。その後、結果の配列をログに記録し、一貫性のない結果を確認しました。2つの項目、場合によっては4つの項目など、非同期であると思わせました。これを読んでいて同様の動作をしている場合は、Chromeの配列ロギングの問題についてこの項目を読むことをお勧めします。