【问题标题】:Creating asynchronous function in JavaScript在 JavaScript 中创建异步函数
【发布时间】:2014-01-05 19:30:51
【问题描述】:

是否可以在 javascript 中调用函数而不等待结果?我有很多递归调用,它们消耗大量内存,所以我有时会得到“超出最大调用堆栈大小”。

【问题讨论】:

  • 您能否展示导致该问题的那段代码,以便我们对其进行优化?
  • 你递归的太多了。而且您没有考虑正确的方向来解决问题。
  • 这不是一块。我正在寻找替代方案,所以我不进行重构。
  • 扩展@AndrewBarber 所说的,使其异步不会改变调用堆栈的深度。所以它不会解决根本问题。有一些技术可以手动优化尾调用。您可能想在“蹦床”上搜索 Javascript。
  • 这里的重点是你需要重构和修复你的算法。 JS 是单线程的,所以你不能拿一块普通的 JS 突然让它异步。你可以探索 webWorkers,但这不会改变你的内存消耗——因为你需要重新考虑你的算法是如何工作的。

标签: javascript recursion function-call


【解决方案1】:

你可以使用

setTimeout( function(){ ..... }, 0  )

【讨论】:

  • 让发帖人决定这个怎么样。可以很好的解决问题
  • 我试图想象任何情况下这都会有所帮助,除非与算法的严重重构相结合。你能描述一个吗?但我确实删除了我的反对票。
  • setTimeout() 将执行,浏览器不会等待结果。这就是被问到的问题,“是否可以在 javascript 中调用函数而不等待结果?”
【解决方案2】:

这是不可能的,并且与等待函数返回无关。您遇到的问题是您在函数中调用函数。

一旦调用函数,调用函数的状态就会被压入堆栈。如果 this 然后调用另一个函数,则将状态推送到堆栈上。堆栈必须增长。您需要查看您的设计以及递归是否适合您的问题。

如果您不需要函数的结果或需要等待它返回,您是否需要递归。

【讨论】:

    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多