Seb*_*ber 3 javascript promise jquery-deferred q rsvp.js
最后,核心Promises/A +规范没有涉及如何创建,实现或拒绝承诺,而是选择专注于提供可互操作的方法.配套规范中的未来工作可能涉及这些主题.
作为一个功能开发人员,我通常会处理monad和operator之类的操作,point bind map或者flatMap链接一些包含在monad框内的调用.
根据这个问题的js递延/无极/未来相比,比如Scala函数式语言,在map和flatMap运营商似乎在融化在一起then的JS规范,可能是因为它不会赚那么多有意义的像的JS动态类型语言同时提供(?)并且使用和记住单个操作符更方便.
到目前为止一直很好,有一个then运营商(似乎并不总是正确实施)
但为什么承诺创建/履行/拒绝不是规范的一部分?这就像只有半个monad :( 似乎我不是唯一抱怨的人
通常,我的问题是:
那我该怎么办?
我可以在我的图书馆里创建承诺
Q.fcall(function () {
return 10;
})
Run Code Online (Sandbox Code Playgroud)
好的很酷,我只是将我的库耦合到Q :(
那么,这个问题有什么解决方案吗?库作者如何创建他暴露给API的承诺而不与实现相结合?
是否有一些免许可证的最低可行承诺A +库可以嵌入我们的库或其他东西?
这个规格选择背后的原因是什么?
这个规格选择背后的原因是什么?
正如Ben在评论中指出的那样,Promises/A +规范的想法不是提供某种库API.它提供了一组最小的可互操作原语,这样任何消费承诺的人都可以依赖它具有统一的接口.这对于跨库互操作尤其重要,例如在应用程序的不同组件的接缝处,其中可能在内部使用不同的promise库.为实现此目标,实际上不需要为promise库指定完整的API.
是否有一些免许可证的最低可行承诺A +库可以嵌入我们的库或其他东西?
有许多Promises/A +实现.我不认为它们中的任何一个都是免许可证的,这是一件好事,因为它们默认是作者保留的所有权利.但是,大多数(全部?)都是开源许可的,应该没问题.
库作者如何创建他暴露给API的承诺而不与实现相结合?
我真的不明白这是怎么可能的.如果你改写这个问题,你会问,"如何在不使用承诺实施的情况下创建承诺?" 这简直不可能.
- 我想公开一个基于promise的API
- 我希望客户端选择他想要使用的promise实现
另一方面,这个目标是另一回事.如果您想让人们选择承诺实施,那么有几个简单的选择.
首先,回报任何实施的承诺; 消费者可以使用他们的库的强制方法将其转换为他们喜欢的.例如,如果你的图书馆返回了一个承诺,而我,消费者,想要一个Q承诺,我可以做Q(yourLibrary.getPromise()).
或者,您可以允许任何遵循Promises/A +构造函数proto-spec的库.这在很大程度上是一个事实上的标准; 大多数主要的库,包括ES6中的承诺,都遵循该规范.例如,您可以允许用户执行yourLibrary.Promise = Q.Promise,然后在库中使用指定的promise构造函数来创建promise.