什么是返回所谓的承诺的函数?

时间:2015-05-11 16:17:24

标签: javascript promise

你怎么称呼一个返回承诺的函数?

这不是笑话的开头

5 个答案:

答案 0 :(得分:8)

嗯......

目前的答案并非如此。事情的真相是没有简短的名字来回复承诺" ,这是JS社区的共识。

在JavaScript中

规范没有以特殊的方式命名它们,没有任何流行的库的文档以特殊的方式命名它们。承诺规范没有以任何特殊方式命名它们。

承诺的起源

另一方面,如果我们检查来自Liskov and Shrira的文献分支,他们就不会,BogleZondervan都不会使用除&#之外的任何字词34;得到承诺"或者"获得未来"对于它(他们使用claim来提取值)。

如果我们检查Mark Miller's work,他也不会使用任何条款。

其他语言

在其他语言中,事情并不好过。对于返回Task s(其承诺)的方法,C#没有特殊名称。它确实有"异步功能"对于返回async / await的函数,但这只是一个严格的子集。 Scala中没有特殊名称,Python中没有特殊名称,Java中没有特殊名称,等等。 close 唯一的就是解析他们的承诺' then回调Continuation,但在这种情况下这几乎没有意义。

名称建议

如果它让你感觉更好 - 我们也没有为返回数组的东西命名。

  • " Monadic功能" - 许多功能可以返回不是承诺的monad,而且承诺不是真正的monad - 他们不会实际上符合当前形式的monad法律,then也没有制作有效的bind。更重要的是,很少有JS开发人员甚至知道monad是什么,甚至更少关心。
  • "异步功能" - 这可能适用于(如果现在不是100%确定)async修饰符添加到语言。现在可能是事件,很多人认为setTimeoutfs.openFile之类的东西是异步函数。
  • " Kleisli Arrows" - 我参加了一门类型理论课程,它涵盖了这个主题,我不认为我或任何其他学生会调用一个返回的函数monad a Kleisli arrow。首先,因为它是Arrow(是的,箭头是我得到的功能)。

结论

总而言之,发明承诺的人,为JavaScript指定它​​们的人,编写该规范的人,规范本身,承诺库,与这些人一起编写的库以及普通用户。 t有任何特殊名称。

我认为我们可以坚持一个返回承诺的函数

如果它让你感觉更好 - 我们不会命名"返回int"要么:)

答案 1 :(得分:7)

在javascript社区中,我发现了一个函数,它返回一个名为“#34; thenable"足够多的时间我认为" 那么"当我编码的时候。它是一个可靠的功能

我喜欢这个名字有很多原因:

1)然后描述功能行为。如果它返回一个承诺,你可以调用"然后"在上面。

2)它的独特性。承诺并非完全是一元的,所以monad并不合适。 "异步"它更像是一类超级函数,并没有帮助描述Promise的本质。但是"然后"是唯一的Promisely。

3)我也喜欢它不会在任何地方重复承诺,(承诺,承诺,承诺功能等)正在接近IMO的循环定义。能够谷歌一个具有一个特定含义的单词真的很好。

答案 2 :(得分:2)

根据我的经验,没有单独的词来描述返回特定类型的函数。它们通常被称为"一个返回< Type> "的函数。

例如:

  • foo()是一个返回 String
  • 的函数
  • bar()是一个返回 Number
  • 的函数
  • baz()是一个返回 Promise
  • 的函数

在此上下文中,Promise的使用方式与强类型语言中的界面类似。

使用的泛型类型的另一个例子是

  • fizz()是一个返回集合
  • 的函数

这并不是说有一个单词定义为"一个返回 Promise "的函数,但是那里&# 39;没有常用的术语来形容这一点。

"延期功能"有时用于描述返回promises或类似promise的对象的函数(即jQuery的延迟对象)。

返回promises的函数也可以用其他更通用的单词来描述(与正方形可以描述为矩形,平行四边形,菱形或四边形的方式大致相同)。

  • 承诺是monad,所以它们可以被描述为" monadic"。
  • Promise是异步的,因此利用它们的函数也可以描述为异步。

就我个人而言,我会使用"承诺函数",作为" promissory"的意思是:

  传达或暗示承诺

我喜欢这样一个想法,即这样一个函数的返回值是"传达一个承诺"。

答案 3 :(得分:2)

我们称之为异步函数。即使函数本身没有任何异步,它至少会返回一个promise - 一个异步值。

您可以将其缩短为 async function ,尽管该术语也用于ES7语法表示法async function,它创建隐式返回promise的函数(其代码可以使用{{1} })。

如果你想要返回monad(承诺是什么)的函数类型,你可以调用它们Kleisli arrows。但你确实问了一个[javascript]问题,而不是[类型理论],你呢?

答案 4 :(得分:1)

技术上,promise is a monad。因此,返回promise的函数是monadic function