Javascript:如何在多个事件发生后执行代码?

3
我希望在多个事件已经发生后使用事件监听器运行一个函数,例如:
listenTo(eventA occurred && eventB occured && eventC occurred) {
    do something.
}

我该如何实现这个目标?

你可以使用 Promise。看一下 Bluebird。 - baao
2个回答

5
请尝试使用 Promise.all
var p1 = new Promise(function(resolve, reject) { 
  listenTo(eventA, resolve);
}); 
var p2 = new Promise(function(resolve, reject) { 
  listenTo(eventB, resolve);
});
var p3 = new Promise(function(resolve, reject) {
  listenTo(eventC, resolve);
});

Promise.all([p1, p2, p3]).then(function(value) { 
  // all three events are triggered.
  doSomething...
});

每个事件都不需要使用匿名函数包装器 - 只需执行 listenTo(eventA, resolve) 等即可。 - Alnitak

0

你应该为每个事件添加事件监听器,如果事件发生,你应该将它存储在一些标志变量中,这些变量在每个事件处理程序中都是可访问的,在此之后,检查所有标志是否都为 true,如果是的话就 doSomething。除了标记变量,你还可以使用 map,还可以创建一些帮助函数,它将接收所有事件并在所有事件发生时检索回调,这完全取决于你的实现风格。我不认为你能找到更好的方法来完成这项任务。


2
“Promises” 现在确实是正确的习语来完成这个任务。 - Alnitak
没错,我也考虑过这个问题,但由于浏览器支持和理解的复杂性,我建议从具有良好接口的包装函数开始。 - Viktor Kukurba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接