DOM event listeners as promises