【问题标题】:Recursive thenables? [duplicate]递归thenables? [复制]
【发布时间】:2015-08-19 18:27:30
【问题描述】:

我正在尝试实现一种模式,在该模式中我调用可能会运行几个小时的 thenables(基于 Promise 的链接)的无限递归循环(我正在玩一个小的 lovefield 项目)。

基本上我正在尝试的是:

runMyRoutine() {
    return doThis().then(function() {
        return doThat().then(function() {
            return runMyRoutine();
        });
    });
}

在这个问题上是否有一些最佳实践(在这种情况下可以使用某种指南或特殊 API?)

就可行性而言,我认为应该可以只保留上述结构,但不存在内存问题吗?

最好的问候, 1

【问题讨论】:

  • 您错过了 3 个returns。 “但不存在内存问题” --- 比如什么?
  • 好吧,我的意思是,我在一个调用堆栈中不断调用所有这些函数,所以如果这是这样做的方式,我会感到有点不安全..
  • “不安全”是什么意思?
  • @Bergi,感谢您的帖子,特别是您在该线程中的回答涵盖了我的所有担忧。

标签: javascript performance recursion promise


【解决方案1】:

你无法摆脱真正的无限递归。你会在某个时候遇到堆栈溢出。

function runMyRoutine() {
  runMyRoutine();  // call stack overflows here at some point
}

但是,在您的情况下,您实际上并没有无限递归。如果doThis() 设置正确,则最后一个runMyRoutine() 有效地位于其自己的调用堆栈上(与最终调用包装它的函数相同的堆栈)。它与原始上下文脱节。

【讨论】:

  • 加一用于堆栈溢出。
  • 实际上,如果一个库实现了 A+ 承诺,那么所有 thens 也将在它们自己的调用堆栈中。
猜你喜欢
  • 2013-10-19
  • 2011-05-27
  • 1970-01-01
  • 2011-10-27
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多