javascript - 如何让 JavaScript 等到某个事件发生?

标签 javascript events web-applications wait

我正在编写一个具有以下结构的网页:

  1. 一个部分(表 A)依赖于另一个部分(表 B);
  2. 另一个部分(表 B)包含需要在每次更新时重新计算的元素。计算由外部工具处理,完成后会引发事件。

为了保证正确性,只有在另一个表完全更新(即完成计算)后,才需要更新该表。但是,我不知道如何有效地实现这一点,而且我在 JavaScript 中找不到任何 wait 工具。

目前,我使用以下方法:

  1. 声明一个全局变量updated并使其为false;
  2. 在第一个表收到输入后,我创建了一个空的 while 循环,直到 updatedtrue
  3. 添加一个监听器,一旦计算完成并收到事件,将 updated 设置为 true

这对我来说似乎不直观,但我想不出任何其他方法。有什么好的方法可以做到这一点吗?

感谢您的任何意见!

最佳答案

在 2022 年,拥有一个触发 Promise 的事件监听器(可用于 promise 链或异步/等待代码)会很有用。一种干净的制作方法:

function getPromiseFromEvent(item, event) {
  return new Promise((resolve) => {
    const listener = () => {
      item.removeEventListener(event, listener);
      resolve();
    }
    item.addEventListener(event, listener);
  })
}

async function waitForButtonClick() {
  const div = document.querySelector("div")
  const button = document.querySelector("button")
  div.innerText = "Waiting for you to press the button"
  await getPromiseFromEvent(button, "click")
  div.innerText = "The button was pressed!"
}
waitForButtonClick()
<button>ClickMe</button>
<div></div>

关于javascript - 如何让 JavaScript 等到某个事件发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6902334/

相关文章:

testing - 自动化 Web 应用程序点击手势以进行测试

web-services - JAX-RS:getClasses与getSingletons

javascript - axios.then(res => { console.log(this) }) 打印未定义

javascript - 为 Canvas 库创建 mousemove 事件

c# - DevExpress MVC 控制每个页面加载生成 2mb 的 javascript

javascript - 初始化时删除事件监听器

java - 使用通配符和类型化泛型会生成 "is not applicable for the arguments"错误

php - 纯基于网络的版本控制系统

javascript - 如何使用 L.CRS.Simple 在传单中显示由 geojson-vt 生成的(反子午线)矢量切片?

javascript - 为什么通过点符号分配的 javascript 对象属性不会触发为该属性定义的 setter?