javascript - ES5 : Returning parent function once all items have called back with a forEach

标签 javascript asynchronous for-loop ecmascript-5

我正在考虑使用 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/

相关文章:

javascript - 找到行中的数字。 JavaScript

javascript - Vuejs 计算属性依赖于其他异步计算属性

for-loop - F# for 循环错误

java - 从其他类中的ArrayList获取大小并比较属性值

javascript - 如何让我的弹出图像继续显示?

javascript - 如何将我的 html/javascript 代码保存为程序?

c# - 如何 TDD 异步事件?

for-loop - 批处理文件 : Fails to Echo Variable Inside Loop

javascript - javascript 中的 Socket.io 给出 NOT_RESOLVED 错误

javascript - Web Worker 中的同步 XHR 请求是否仍会锁定浏览器?