我正在查看使用ES5的新Array.forEach()。我相信每個項目的回調應該並行執行。我想要一個函數在所有值都處理完畢後返回。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
}
})
}
我懷疑這可能是錯誤的做法:因爲每一個回調已經被解僱前parent_function可以完成。在這種情況下,發起自定義事件(這是由處理所有項目後生成的數據處理的)可能是最好的方法。不過,在MDC文檔中我沒有發現任何提及。
但我相當新的JS和愛一些同行評審來確認!
編輯:看起來像forEach()畢竟是同步的。之後我記錄了結果數組,並看到了不一致的結果 - 有時是兩個項目,有時是四個等,這使我認爲它是異步的。如果你正在閱讀本文並且有類似的行爲,我建議你閱讀這個item about issues in Chrome's array logging。
赫赫謝謝。由於其他奇怪的行爲,我認爲我只是假設異步。 http://ecma262-5.com/ELS5_HTML.htm#Section_15.4.4.18提到了同步行爲。 – mikemaccana 2012-04-10 20:22:15