javascript - 如何在javascript中等待样式改变
问题描述
我试图从单击按钮后出现的 div 中获取值
async function pollVisibility() {
try {
document.querySelector("#contact_methods > li").click()
if (!$("#contact_methods > li > div > span").is(":visible")) {
return document.querySelector("#contact_methods > li > div > strong").innerText
} else {
setTimeout(pollVisibility, 100);
}
} catch (e) {
console.log(e)
}
}
后来我称之为...
let telephone = await pollVisibility();
但我仍然得到旧值(点击前)
解决方案
要调整您当前的代码,请承诺 setTimeout,然后返回递归调用pollVisibility
:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
async function pollVisibility() {
try {
document.querySelector("#contact_methods > li").click()
if (!$("#contact_methods > li > div > span").is(":visible")) {
return document.querySelector("#contact_methods > li > div > strong").innerText
} else {
return delay(100).then(pollVisibility);
}
} catch (e) {
console.log(e)
}
}
虽然try
/catch
很奇怪 - 如果这是您完整的真实代码,最好先明确测试以查看有问题的元素是否存在,而不是运行可能导致抛出错误的代码。
除非您的实际代码也包含await
在其中,否则也不需要该函数async
。(要确保返回的值是第一次迭代的 Promise,请将其包装在 中Promise.resolve
)
推荐阅读
- php - ACF 子组第二个图像不显示
- docker - 在 docker 中运行 Filebeat 作为 IoT Edge 模块
- java - RxJava2 中的条件可完成
- swiftui - 如何应用修饰符或按条件查看
- zapier - 无法将 Magento 2.x 与 zapier 连接
- python - 集合内的Python正则表达式多字符匹配
- c# - 异步等待数据改变
- android - 如何在导航抽屉菜单中称为“查看下载”的选项之一中显示下载的图像(历史记录)
- selenium - 选项卡后的机器人框架输入文本
- postgresql - Google Data Studio + Postgresql 中的动态日期