首页 > 解决方案 > 使用 Promise 的内置方式,而不是添加事件监听器

问题描述

我有一些代码使用addEventListener. 作为一个实验,我编写了一个包装器函数来包装带有承诺的任意事件监听器调用。可能有更好的方法来做到这一点。但是是否有一个原生 API 可以转换为 Promise 或使用 Promise 而不是回调来处理事件?显然,这是一个有点没用的例子,但是当添加一个新的事件处理程序时,是否存在一种方法可以在本机返回一个承诺?

function event(el, name) {
  return new Promise(resolve => el.addEventListener(name, e => resolve(e)));
}

let url = URL.createObjectURL(blob)
let audio = new Audio();

//Promise way
event(audio, 'ended').then(e => {
  URL.revokeObjectURL(url);
});

//Classic way
audio.addEventListener('ended', e => {
  URL.revokeObjectURL(url);
});
audio.src = url;

audio.play();

标签: javascriptpromisedom-events

解决方案


推荐阅读