gpt4 book ai didi

javascript - 为什么 JS Promise A+ create/fulfill/reject 不是规范的一部分?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:48 27 4
gpt4 key购买 nike

http://promisesaplus.com/

Finally, the core Promises/A+ specification does not deal with how to create, fulfill, or reject promises, choosing instead to focus on providing an interoperable then method. Future work in companion specifications may touch on these subjects.

作为函数式开发人员,我通常会处理单子(monad)和操作符,例如 point bind mapflatMap 到包裹在一些 monad 盒子中的链式调用。

根据这个问题Js Deferred/Promise/Future compared to functional languages like Scala , mapflatMap 运算符似乎在 js 规范中的 then 下融合在一起,可能是因为提供它没有多大意义既在像 Js (?) 这样的动态类型语言中,也更便于使用和记住单个运算符。


到目前为止一切顺利,有一个 then 运算符 ( that doesn't seem to always be properly implemented )

但是为什么 promise create/fulfill/reject 不是规范的一部分?这就像只有半个 monad :( It seems I'm not the only one to complain

通常,我的问题是:

  • 我想创建一个 JS 库
  • 我想公开一个基于 promise 的 API
  • 我希望客户选择他想要使用的 promise 实现

现在我该怎么办?

我可以像这样在我的库中创建 promise

Q.fcall(function () {
return 10;
})

好吧,我刚刚将我的库耦合到 Q :(

那么,这个问题有什么解决办法吗?库作者应该如何在不耦合实现的情况下创建他向 API 公开的 promise ?

是否有一些免许可的最低可行 promise A+ 库,我们可以将其嵌入到我们的库或其他东西中?

选择此规范的原因是什么?

最佳答案

What are the reasons behind this spec choice?

正如 Ben 在评论中指出的那样,Promises/A+ 规范的想法不是提供某种库 API。它是为了提供一组最小的可互操作原语,以便任何使用 promise 的人都可以依赖它具有统一的接口(interface)。这对于跨库互操作尤其重要,例如在应用程序不同组件的接缝处,内部可能使用不同的 promise 库。为 promise 库指定完整的 API 并不是实现此目标所必需的。

Is there some license-free minimum viable promise A+ library that we can embed in our libraries or something?

many Promises/A+ implementations .我不认为它们中的任何一个是免许可的,这是一件好事,因为那样的话它们将默认由其作者保留所有权利。不过,其中大多数(全部?)都是开源许可的,这应该没问题。

How a library author is supposed to create the promises he exposes to the API without coupling to the implementation?

我真的不明白这怎么可能。如果您重新表述这个问题,您是在问“如何在不使用 promise 实现的情况下创建 promise ?”这显然是不可能的。

  • I want to expose a promise-based API
  • I want the client to choose the promise implementation he wants to use

另一方面,这个目标是另一回事。如果您想让人们选择 promise 实现,那么有几个简单的选择。

首先,只需返回任何实现的 promise ;消费者可以使用他们图书馆的强制方法将其转换为他们喜欢的。例如。如果你的图书馆返回一个 when promise ,而我,消费者,想要一个 Q promise ,我可以做 Q(yourLibrary.getPromise())

或者,您可以允许任何遵循 Promises/A+ constructor proto-spec 的库.到目前为止,这在很大程度上是一个事实上的标准;大多数主要的库,包括 ES6 中内置的 promises,都遵循该规范。因此,例如,您可以允许用户执行 yourLibrary.Promise = Q.Promise,然后在您的库中使用指定的 promise 构造函数来创建 promise 。

关于javascript - 为什么 JS Promise A+ create/fulfill/reject 不是规范的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23251491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com