2
我很想在承诺中包装一个事件。等待承诺的事件
更具体地说,我很想有一个方法来承诺,从每个发出的事件返回值。
var events = require('events')
var eventEmitter = new events.EventEmitter()
eventEmitter.on("add", function(data){
console.log(data+1)
return data+1
})
eventEmitter.emit('add', 5)
eventEmitter.emit('add', 3)
setTimeout(function(){
eventEmitter.emit('add', 13)
}, 1000)
setTimeout(function(){
eventEmitter.emit('add', 10)
}, 3000)
这是一个会发出6, 4, 14, 11
的事件。我喜欢的是一个承诺包装,返回[6, 4, 14, 11]
。
//eventWrapper(emissions, event, [eventArguments])
eventWrapper(4, eventEmitter, "add").then(console.log) // [6, 4, 14, 11]
理想的情况下有一个超时参数,以及因此如果排放不返回,并满足内x
量秒有一个错误的排放。
最后(我知道这已经达到了一点),但是当涉及到socket.io时,有一个问题,在广播的emisson .on
处理程序不会返回回调,在这个非常专业的使用中,事件可能是代理由一个完全不同的事件处理,像这样。
eventEmitter.on("callback", function(data){
console.log(data+1)
return data+1
})
eventEmitter.on("add", function(data){
eventEmitter.emit("callback", data)
})
不是看回调原始事件的,我需要一种方式,第二个事件经过,并代理回调到该事件。
理想情况下,功能看起来像这样。
//eventWrapper(numberOfExpectedReturnedEvents, delimiterTimeoutIntervalBetweenEvents, eventAndParameters, proxyEventAndParameters)
eventWrapper(numberOfSockets, 5000, [socket.on, "action"], [socket.io, "callback"])
承诺只解决或拒绝** **一次。这就是他们的承诺。承诺**不能**取代事件发射器。如果你感兴趣的话,什么可以替代事件发射器,在功能反应式编程世界中,它们是可观察的。一个使用它的库的例子是[bacon.js](https://baconjs.github.io/)。 –
谢谢@FlorianMargaine我正在玩bacon.js,但我真的不明白。节点的例子并不多,使用socket.io的例子更少。 – ThomasReggi