javascript - 在 Chrome 调试器工具中设置超时
问题描述
我尝试在 chrome 调试器工具中运行脚本。在脚本中我想等待(例如,在渲染动画后等待按钮)。我怎样才能做到这一点?我找到了一些这样的解决方案:
async function test () {
console.log('1');
await setTimeout(function() {
console.log('2');
}, 3000);
console.log('3');
}
我希望在三秒后打印 1、2 和 3。但结果是 1,3,然后在三秒后打印 2。
我想为几个连续的动作做这件事。
知道我该怎么做吗?
解决方案
你不能得到函数await
的结果,setTimeout
因为它不是Promise
. 要执行您想做的事情,您可以Promise
在 3 秒后创建一个解析,这是一个示例:
async function test() {
console.log('1');
console.log('2');
await new Promise(resolve => {
setTimeout(resolve, 3000);
});
console.log('3');
}
test();
根据您的描述,您似乎想在某些 DOM 元素可用时访问它们,有MutationObserver,这是一个示例:
const parent = document.querySelector('#parent');
setTimeout(() => {
const button = document.createElement('button');
button.textContent = 'BUTTON';
button.id = 'targetBtn';
parent.appendChild(button);
}, 2000);
const observer = new MutationObserver((mutationList) => {
mutationList.forEach((mutationRecord) => {
if (mutationRecord.addedNodes && mutationRecord.addedNodes.length) {
const btn = [...mutationRecord.addedNodes].find(n => n.matches && n.matches('#targetBtn'));
if (btn) {
console.log('Button #' + btn.id + ' was found');
}
}
});
});
observer.observe(parent, {
childList: true
});
<div id="parent">
</div>
这样做是为了监视#parent
元素的子列表以查看何时#targetBtn
添加元素。
这有点矫枉过正,更好的解决方案是监视将导致目标元素可用的事件。
推荐阅读
- swiftui - 如何将 String?-type 对象分配给 String-type 变量?
- ruby-on-rails - RSpec - 无法模拟 ActiveRecord 模型类
- tags - 找不到模块:无法解析“react-meta-tags”
- javascript - 图像不会使用这些脚本调整大小
- jquery - 更改事件不适用于使用 jquery 的 span 标签
- visual-studio-code - 启动 VS Code 时重新定义终端不起作用
- interface - 在 Open Modelica 中定义 Medium 后仍然存在介质问题
- java - 保护本地 Java 嵌入式数据库
- c - 在函数中使用 goto 语句切换会无限期地运行吗?
- javascript - 如何转到 AMP 历史记录中的 AMP 页面