打个比方:const xhr1 = new XMLHttpRequest();const xhr2 = new XMLHttpRequest();通行的做法是分别给两个xhr添加事件监听器,但如果事件监听器都相同的话,非常繁琐而且容易出错。所以我想到了DOM树上的事件委托,似乎也是用来处理这种监听器相同的场景的。但是对于不在DOM树上的非HTML元素,请问应该怎么做?parent.addEventListener// parent写啥?EventTarget.all([xhr1, xhr2]).addEventListener// 存在类似的函数吗?可能这么解释更好一点,我想要的是Promise.all的事件版,或者Observable.merge的所有事件版,或者能达成相同功能的方法或hack。请问应该怎么做?多谢回答。
3 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
function myEvent() {
this.tasks = [];
this.on = (name, cb) => {
this.tasks.push({ name, cb })
}
this.emit = (name) => {
let ts = this.tasks.filter((t) => t.name == name)
ts.forEach(({ cb }) => { cb(); })
}
}
let test = new myEvent();
test.on('hhh', () => { console.log('do something') })
setTimeout(() => {
test.emit('hhh')
}, 1000)
不知道你是不是这个意思,如果是的话随便自己怎么写的吧。
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
添加回答
举报
0/150
提交
取消