我正在开发一个供其他人使用的 pub/sub Mediator 库,但我不知道如何处理错误。
这是一段示例代码:
/**
*
* @param String channel Channel to subscribe
* @param String|function callback Function name or callback
* @param String context Context to bind function to
* @param Boolean once True to subscribe once
**/
this.subscribe = function (channel, callback, context, once) {
if (!_.isObject(context)) {
context = window;
}
if (!_.isFunction(subscription) && !_.isFunction(context[subscription])) {
throw new Error('Function passed as callback to channel subscription named ' + channel + ' seems invalid!');
}
// Everything ok, add to channels object
channels[channel].push({fn: subscription, context: context || this, once: once});
}
此方法是库的一部分。它的 API 需要一个通道名称和一个有效的回调(函数名称、lambda 或回调)。
如果通道参数不是字符串,库很容易停止。如果传递了无效的上下文,则假定为 window。这两个参数中的错误很容易调试。
但是,如果传递了无效的回调,它会传播错误,直到触发事件(进行频道发布)。在发布/订阅系统中,如果事件很少被触发,这可能会成为调试的噩梦。
所以我的问题是...
在这种特定情况下,考虑到我正在为其他人开发 javascript 库,我应该:
- 抛出错误以防止进一步的错误传播?
- 返回 false/undefined/-1 并且不注册订阅?
- 正常进行,让它死在某个地方,将调试留给第三方开发人员
注意:有一个类似的问题,但我的情况有点不同,提供的答案并没有让我的精神放松。