延伸承诺模式?

时间:2013-12-18 16:32:56

标签: javascript design-patterns deferred anti-patterns

使用额外功能扩展承诺是一种反模式吗? 我有一个对Facebook进行API调用的服务示例:

FacebookService
    - importFeed(fanPage, sinceDate): Promise
    - importComments(fanPage, recursively, sinceDate): Promise
    - publishPost(fanPage): Promise
    - checkApiStatus(): Promise

这可以改写为

FacebookService
    - importFeed(): ExtendedPromise
    - importComments(recursively): ExtendedPromise
    - publishPost(): ExtendedPromise
    - checkApiStatus(): Promise

并像那样使用

var service = new FacebookService();
var fanPage = new FanPage(...);

service.importFeed()
       .from(fanPage)
       .since(new Date(...))
       .then(fn, fn);

service.importComments(true)
       .from(fanPage)
       .then(fn, fn);

这种实施的缺点是什么?

1 个答案:

答案 0 :(得分:1)

承诺只是界面。任何对象都可以实现API,因此提供了promise功能。

缺点是如果您依赖添加的功能,您的代码将不那么灵活/可组合。其他函数必须知道并返回这样的“扩展承诺”,它们不能只返回任何承诺。