Promise-like event binding