我正在考虑使用 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() 毕竟是同步的。我后来记录了结果数组并看到不一致的结果 - 有时是两个项目,有时是四个项目等,这让我认为它是异步的。如果您正在阅读本文并有类似的行为,我建议您阅读本文 item about issues in Chrome's array logging 。
最佳答案
forEach() 调用是同步的,您可以在 forEach() 完成时返回新的数组:
function parent_function(array_of_things) {
var new_array = [];
array_of_things.forEach(function(thing) {
new_array.push('New '+thing);
});
return new_array;
}
关于javascript - ES5 : Returning parent function once all items have called back with a forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10095531/