【问题标题】:Extending promise pattern?扩展承诺模式?
【发布时间】:2013-12-18 16:32:56
【问题描述】:

用额外的功能扩展承诺是一种反模式吗? 我有一个对 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);

这样的实现有什么缺点?

【问题讨论】:

  • 什么时候调用会在你的模式中实际执行?
  • 如果我明白你在问什么,我认为 jQuery 会做这种事情。例如。 $.ajax 返回的 promise 被扩展为支持 XHR 方法。
  • 但这也许是多重继承,而不是扩展。它返回继承自 Delayed 和 XHR 的对象。

标签: javascript design-patterns deferred anti-patterns


【解决方案1】:

Promise 只是一个接口。任何对象都可以实现 API,因此可以提供 Promise 功能。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2016-11-07
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多