window.addEventListener两个弹窗返回值丢失
时间: 2023-10-02 19:05:15 浏览: 75
javascript中window.event事件用法详解
在使用 `window.addEventListener` 添加事件监听器时,如果事件是异步的,可能会导致两个弹窗的返回值丢失。这是因为,当第一个弹窗弹出时,JavaScript 代码会等待用户的响应,而不会执行下一行代码。当用户关闭第一个弹窗后,第二个弹窗会立即弹出,但是此时第一个事件监听器的回调函数还没有执行完毕,因此第二个弹窗的返回值会丢失。
为了解决这个问题,可以使用 `Promise` 对象将事件监听器的回调函数包装起来,并使用 `async/await` 语法来等待用户的响应。例如:
```javascript
function showDialog() {
return new Promise((resolve, reject) => {
window.addEventListener('click', function onClick(event) {
window.removeEventListener('click', onClick);
resolve(event.target);
});
});
}
async function run() {
const result1 = await showDialog();
const result2 = await showDialog();
console.log(result1, result2);
}
run();
```
在上面的代码中,`showDialog` 函数返回一个 `Promise` 对象,在该对象的回调函数中添加事件监听器,并在用户点击页面时调用 `resolve` 函数返回事件的目标元素。在 `run` 函数中,使用 `async/await` 语法依次弹出两个弹窗,并等待用户的响应,然后输出返回值。这样就可以避免多个弹窗的返回值丢失的问题。
阅读全文