0

我正在考虑使用 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() 毕竟是同步的。之后我记录了结果数组并看到不一致的结果——有时是两个项目,有时是四个项目,等等,这让我觉得它是异步的。如果你正在阅读这篇文章并有类似的行为,我建议你阅读这篇关于 Chrome 数组日志记录中的问题的文章

4

2 回答 2

1

The forEach() call is synchronous, you can just return the new Array when the forEach() is finished:

function parent_function(array_of_things) {
  var new_array = [];
  array_of_things.forEach(function(thing) {
    new_array.push('New '+thing);
  });
  return new_array;
}
于 2012-04-10T20:14:05.960 回答
1

不,所有这些迭代器函数都是同步的。这意味着,回调一个接一个地执行下一个项目,然后最终forEach()返回(并返回未定义)。

如果您想要new_array每个回调调用的结果,您可以查看map().

于 2012-04-10T20:01:36.007 回答