【发布时间】:2021-06-26 04:16:23
【问题描述】:
我正在制作一个弹出式 div,我希望在动画上附加一个承诺,以便在弹出式结束后我可以做一些事情。
我的方法不起作用,因为我找不到将承诺传递给事件处理程序上的函数的方法。似乎你不能在这里使用绑定。我已经尝试过,虽然我可以解决承诺,但我无法删除事件处理程序
这里有什么不同的解决方案?
function EventListenerForPopUp() {
this.removeEventListener("animationend", EventListenerForPopUp );
this.Show.resolve();
}
function ShowHideDiv() {
this.Show = function () {
return new Promise(function(resolve, reject) {
this.Div.addEventListener("animationend", EventListenerForPopUp, false);
}.bind(this));
}
}
【问题讨论】:
-
addEventListener 用于在对象或 DOM 元素上设置事件。它需要一个回调,这是“旧”的做事方式。难道没有一种简单的方法可以将 addEventListener 包装在 Promise 中,以便可以使用 'then' 和 'catch' 吗?我很想在我的程序中使用这种一致性。这个问题似乎还没有一个可以接受的答案,即使在 2 年后也是如此。
-
当然,明显的区别是同一个事件可以一次又一次地发生,而单个异步操作只发生一次。 Promise 有一个 Pending 状态,该状态仅更改一次为 Fulfilled 或 Rejected 状态。这与重复发生的事件不太匹配。对重复出现的 setInterval 也不是很好匹配,但对出现一次的 setTimeout 很好匹配。
标签: javascript