JavaScript中的延迟/承诺概念是新概念还是函数式编程的传统部分?

hip*_*ail 12 javascript history functional-programming promise deferred

我真的很喜欢jQuery延迟/承诺模式或范例的想法,但有时候我很难将我老化的大脑包裹在更精细的点或具体的实现细节之外.

事实上,最近我发现deferred/promise模式/范例似乎早于jQuery,并且至少在其他JavaScript库/框架中:

我可能错过了一些,其中包含其他一些内容的东西,并在该列表中犯了其他错误...请编辑它以纠正它或发表评论.

"Q"是否发明了延迟/承诺概念?它是用其他JavaScript库或框架发明的吗?还是它完全早于JavaScript?

如果整个想法传统上是函数式编程的一部分,它首先在哪里完成,我在哪里可以阅读有关概念而不是这些各种不同的JavaScript实现?

或者功能性编程完全不是重点?概念是否与并发编程相关而不是与函数式编程相关?

rsp*_*rsp 9

据维基百科说:"承诺"一词是由丹尼尔·弗里德曼和大卫·怀斯于1976年提出的,而彼得·希巴德则称之为最终.1977年Henry Baker和Carl Hewitt在一篇论文中介绍了一个类似的概念未来.

请参阅: 维基百科的期货和承诺历史:

未来和/或承诺构造首先在诸如MultiLisp和Act 1之类的编程语言中实现.在并发逻辑编程语言中使用逻辑变量进行通信与未来非常相似.这些开始于Prolog with Freeze和IC Prolog,并成为真正的并发原语,包括关系语言,并发Prolog,保护号角(GHC),Parlog,Vulcan,Janus,Mozart/Oz,Flow Java和Alice ML.来自数据流编程语言的单一赋值I-var,源自Id并包含在Reppy的Concurrent ML中,非常类似于并发逻辑变量.

承诺流水线技术(使用期货来克服潜伏期)是Barbara Liskov和Liuba Shrira在1988年[12]发明的,由Mark S. Miller,Dean Tribble和Rob Jellinghaus在大约1989年的Xanadu项目中独立发明.[13]

承诺一词是由Liskov和Shrira创造的,尽管它们通过名称call-stream引用了流水线机制,现在很少使用它.[...]


Mar*_*wak 6

我认为在JavaScript中,deferred/promise概念最初出现在Dojo(受Python的Twisted启发)然后出现在jQuery中.

值得注意的时刻是CommonJS小组的工作,它为JavaScript的"标准化"承诺付出了很多努力,参见A,BD提案,在此基础上Kris Kowal的Q(我猜当前最流行的实现)已经发展.

Deferred(我是作者)是后来实现的,它最初受到Q的启发,它的目标是让JavaScript在自然中感觉自然,并且还可以轻松地从Node.js回调样式转换.

但是,正如@rsp所写,承诺是比JavaScript本身更古老的概念:)