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

Ros*_*oss 9 javascript promise

你称之为返回承诺的函数是什么?

这不是笑话的开始

Ben*_*aum 8

好...

目前的答案并不正确.问题的真相是,JS社区的共识中没有"返回承诺的功能"的简短名称.

在JavaScript中

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

承诺的起源

另一方面,如果我们检查来自Liskov和Shrira的文献分支,他们不会,Bogle和Zondervan也不会使用除"获得承诺"或"获得未来"之外的任何术语(他们确实使用claim用于提取值).

如果我们查看Mark Miller的作品,他也不会使用任何条款.

其他语言

在其他语言中,事情并不好.对于返回Tasks(其promise)的方法,C#没有特殊名称.对于返回async/await的函数,它确实有"异步函数",但这只是一个严格的子集.Scala中没有特殊名称,Python中没有特殊名称,Java中没有特殊名称等等.唯一关闭的是parse的Android API命名他们的承诺' then回调,Continuation但这在这种情况下几乎没有意义.

姓名建议

如果它让你感觉更好 - 我们没有返回数组的名称.

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

结论

总而言之,发明承诺的人,为JavaScript指定它​​们的人,编写该规范的人,规范本身,承诺库,用这些编写的库和普通用户都没有任何特殊名称为了它.

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

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


Chr*_*vis 7

在javascript社区中,我看到一个函数返回一个名为"thenable"的promise,足以让我在编码时觉得" 可以 ".这是一个很好的功能.

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

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

2)它是独一无二的.承诺不完全是monadic,所以monad不合适."异步"更像是一类超级函数,并没有帮助描述Promise的本质.但"可以"是唯一的Promisely.

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

  • 此外,根据定义的术语 - thennable 函数是具有“then”方法的函数。 (2认同)