2017-04-26 43 views
2

在它说Promises/A+ spec (section 3)在这方面什么是蹦床?

由于承诺的实现被认为是平台的代码,它可能 本身包含一个任务调度队列或“蹦床”,其中 处理程序被调用。

在这方面什么是蹦床?

+1

[Wikipedia解释](https://www.wikiwand.com/en/Trampoline_(computing)#/ High-level_programming)*一个蹦床是一个循环,迭代地调用[thunk](https:// www。 wikiwand.com/en/Thunk_(functional_programming)) - 返回函数([continuation-passing style](https://www.wikiwand.com/en/Continuation-passing_style))*。 – sp00m

+0

JavaScript事件循环是蹦床吗?我想我的问题是:为什么在Promise/A +规范中提到似乎是一个实现细节?在这种情况下,蹦床有特殊的意义吗? – Ben

+1

[这是一个蹦床的例子](https://github.com/bergus/F-Promise/blob/master/src/continuations.js#L23-L27)在一个非常复杂(因此被放弃)的承诺实现中。 – Bergi

回答

0

蹦床是一种控制结构,它可以实现递归逻辑,同时避免没有尾部呼叫优化的基于堆栈的语言的限制。

嵌套承诺链的递归性质本身就是一个承诺实现的递归解决方案。

因此,蹦床在Promise/A +规范中被认为是一种常用的实现方法,尽管在某些语言中蹦床没有必要或实际上可能不是最优的。

例如,ES2015在JavaScript中引入了尾部呼叫优化,使得(用户至少)蹦床成为可能,不再需要蹦床。 Promise/A +规范是在ES2015年前写成的。