我希望我的控制器能够订阅外部事件源,我通常会用以下方式定义:
var source = new EventSource('http://someURL.com/foo');
source.addEventListener('bar', handler, false);
现在假设我正在使用的 API 只有一个正确的事件,但该事件会根据实际事件为您提供不同的字符串。所以我的处理程序看起来像:
var handler = function(data) {
switch(data.cmd) {
case 'alpha' : doSomething(); break;
case 'beta' : doSomethingElse(); break;
case 'cappa' : doAnotherThing(); break;
}
}
这很不幸,我知道,但这就是它的实施方式。我想要的是能够公开一个有意义的服务 API,所以在我的控制器中,我将能够单独订阅每种类型的事件,订阅一次,或重复订阅,以及取消订阅。
这有意义吗?使用 $q API 是否有更好的方法来做到这一点?如果不是,我将如何将异步事件映射到 AngularJS 服务 API?