请问如何将监听事件改为promise的形式
现在的代码结构是这样：
```
function receiver(type, callback) {
  document.addEventListener(type, (ev) => {
    callback(ev);
  });
}
```
然后通过回调函数来执行：
```
receiver('click', (ev) => {
  console.log(ev)
})
```
现在想改为promise的形式：
```
receiver('click').then(ev => {
  console.log(ev)
})
```
请问需要怎么修改？
Promise就像一个状态机，而且是一个状态不可逆的状态机，这就意味它只会在到达Fullfiled或者Rejected状态时会执行你注册的函数，所以用Promise实现是不合适的
但是可以写成这样以达成相似效果
```
function receiver(type) {
  const listeners = [];

  const listen = {
    then(callback) {
      listeners.push(callback);

      return listen;
    }
  };
  document.addEventListener(type, async (ev) => {
    let acc = ev;
    for (let i = 0; i < listeners.length; ++i) {
      acc = await listeners[i](acc);
    }
  });

  return listen;
}

receiver("click")
  .then((e) => {
    console.log(e);

    return 1;
  })
  .then((v) => {
    console.log(v);
  });

```