【问题标题】:Publish/Subscribe API design : Unsubscribe and Update发布/订阅 API 设计:取消订阅和更新
【发布时间】:2015-09-09 19:51:22
【问题描述】:

我正在寻找一个可以让我修改当前订阅的发布/订阅系统。我找不到任何东西,所以我想我会构建自己的(在 JavaScript 中)。

我有publishsubscribe 的基本方法如下:

ps.publish(params, function(err, res) {
...
});

ps.subscribe(params, function(err, data) {
...
});

现在我想为我的订阅添加unsubscribingupdate 的方法。 IE。如果 subscribe 是 CREATE,那么 unsubscribe 将是 DELETE,update 将是 PUT。

我应该如何设计这些 API? update 应该只是一个 unsubscribe 后跟另一个 subscribe 吗?如何让用户选择订阅?

另外,我打算使用返回值来返回一个future,因为我发现它是一种更优雅的异步调用组合方式,但我不确定这是否是最佳选择,我仍在权衡它针对流利的 API。出于这个原因,除非我可以明确选择,否则我暂时不使用它。

unsubscribe 似乎是最容易的,但我不想在错误的地方结束:

ps.subscribe(params, function(err, data) {
   ps.unsubscribe(data.id);
});

我应该如何构建这些方法?

【问题讨论】:

    标签: javascript publish-subscribe api-design


    【解决方案1】:

    通常订阅函数会返回另一个用于取消订阅的函数。您可以从 subscribe 返回一个函数,该函数在不带任何参数的情况下调用时会取消订阅,但在使用另一个函数作为参数调用时会更新订阅。

    在代码中它看起来像这样。

    ps.subscribe = function (params, callback) {
      ...
      return function (callback) {
        if (callback) {
          ...
          // update - replace with a new callback 
        } else {
          ...
          // cancel subscription
        }
      }
    }
    
    var changeSubscription = ps.subscribe(params, callback);
    changeSubscription(anotherCallback); // update
    changeSubscription(); // unsubscribe
    

    【讨论】:

    • 能否请您扩展一下(带有代码示例)?
    • 我现在明白了。我会坐一会儿,但我并不完全认同这个概念。
    • 另一种选择是从 subscribe 方法返回一些令牌(您可以使用它在存储订阅的集合中找到此订阅),然后使用此令牌更新或删除订阅。
    • 是的,这也是我最初的想法,但我没有返回它,而是将它放入回调的data 参数中。我的意思是,你想使用这样的图书馆吗?我不知道为什么,但我还是觉得有点笨拙。
    • 我宁愿采用我的第一个概念——从订阅返回一个可用于修改此订阅的函数。您还可以使用两种方法返回一个对象 - 一种用于修改,一种用于更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多