【问题标题】:Can function calls in a loop run after some function call after the loop declaration?循环中的函数调用可以在循环声明之后的某个函数调用之后运行吗?
【发布时间】:2016-06-20 18:24:57
【问题描述】:

想象以下代码,在节点上运行并使用 lodash:

var result = [];

_.each(someArray, function (elem) { ... result.push(newElem); });
_.each(anotherArray, function (elem) { ... result.push(newElem); });

superfunction(result);

在某些情况下,superfunction 是否可能在 each() 完成之前运行,这意味着 superfunction 将获得一半填充的 result 数组?

【问题讨论】:

  • 是的,当然。 result.push() 可能在异步方法的回调中,在这种情况下,超级函数将在任何 .push() 调用发生之前运行。
  • 好的,但是,如果在 eachs 调用的那些函数上完全同步代码 - 例如,只是一些数学计算 - 是否可以在循环完成之前调用超级函数?
  • 没有。如果它是同步的,那么它永远不会离开当前的调用堆栈,因此超级函数在每个完成之前都无法运行。
  • 这是出于所有实际目的,询问代码 x(); y(); 中是否可以在 x 完成之前运行 y。不。JS 是一种命令式/顺序编程语言,一次按顺序执行一条语句。

标签: node.js asynchronous lodash


【解决方案1】:

除非改变 result 的语句是异步执行的,例如作为 REST 调用的结果。

除此之外,那些 lodash 函数是完全同步的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 2021-03-13
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多