Javascript 如何实现多事件火灾&;事件存储器(事件和承诺的特征组合) 我的要求
由于我的应用程序的异步架构,我正在寻找一个具有以下两个属性的“事件”系统:Javascript 如何实现多事件火灾&;事件存储器(事件和承诺的特征组合) 我的要求,javascript,angularjs,events,promise,Javascript,Angularjs,Events,Promise,由于我的应用程序的异步架构,我正在寻找一个具有以下两个属性的“事件”系统: 事件应该能够触发多次(可以通过事件触发,但不能通过承诺触发) 当我开始监听已经触发的事件时,我希望侦听器立即触发一次(就像承诺一样) 原因是1。我希望能够多次触发很多事件(例如,某些数据的更新)。但是我想把这个和2结合起来。因此,如果在添加侦听器时已触发事件,则会立即调用此侦听器。这是因为我并不总是确定(我也不想确定)哪段代码首先运行 我的“解决方案” 我想出了以下解决办法。我在AngularJS应用程序中使用它,因此是
app.controller('AppCtrl', function(CustomEventEmitter){
// Broadcast an event. No listener added so nothing happens
CustomEventEmitter.broadcast('event');
// Add the event listener. Because the event allready fired, the listener gets called immediatly
CustomEventEmitter.on('event', function(){
console.log('Event emitted');
});
// Broadcast an other event
CustomEventEmitter.broadcast('event');
});
app.service('CustomEventEmitter', function(){
var
listeners = {},
memory = [];
this.broadcast = function(name){
// The normal broadcasting of the event to the listener
if(listeners[name]) {
listeners[name].forEach(function(listener){
listener();
});
}
// Push the event into the 'memory'
memory.push(name);
};
this.on = function(name, listener){
// The normal adding of the listener
if(!listeners[name]) {
listeners[name] = [];
}
listeners[name].push(listener);
// If an event is already in memory, call the listener
if(memory.indexOf(name) !== -1) {
listener();
}
};
});
我的问题
我的问题是:
这两种工具都提供了您所需要的特定工具,以及大量的替代工具。您签出了吗?我刚刚查看了Bacon.js,并在FAQ页面(//github.com/baconjs/Bacon.js/wiki/FAQ)上看到了这一点,不幸的是:“这里发生的事情是,当没有侦听器时,您的属性不会得到更新。在使用onValue添加实际侦听器之前,该属性未处于活动状态;它没有监听底层总线。它会忽略输入,直到有人感兴趣。因此,这一切都归结为所有培根流和属性的“懒惰”。这也是一个关键特性:当添加订阅者时,流自动“插入”到它们的源,当没有更多订阅者时,流自动“拔出”。“@Zjaaspoer:你有什么问题?不,你真的在找FRP图书馆。@Bergi:如果我完全忘记了,我很抱歉。但是我已经阅读了几个小时关于FRP的go to library(上面提到的Bacon.js),并且已经做了很多实验。但我看不出,使用这种编程技术,您如何能够满足需求2。也就是说,我希望触发一个事件,并在稍后时间开始侦听该事件,但仍然会收到事件发生的通知