【发布时间】:2017-12-12 14:51:47
【问题描述】:
我想要实现的是能够在检查元素当前是否在 DOM 中时使用 Promise。我的想法是远离setTimeOut,但真正使用window.requestAnimationFrame 与setTimeOut 完全相同,只是性能更高一点。
const doCheck = function(selector){
if (document.querySelector(selector) === null) {
window.requestAnimationFrame(function () {
doCheck(selector);
});
} else {
return true;
}
};
export default function checkElement(selector) {
return new Promise(res => {
doCheck(selector);
res(true);
})
}
但当然这不能工作,主要问题是你在选择器不存在时调用另一个函数的事实,我如何用承诺封装这一点?似乎是你不能做这样的事情。
【问题讨论】:
-
你为什么要从 DOM 中获取这些信息?将元素添加到 DOM 的代码应该为您提供该承诺。
-
除了@Bergi 的评论之外,为什么您究竟需要加载
raf进行这样的轮询工作,例如每秒创建60 个承诺等。您可以使用Mutation Observer,这似乎是正确的当你关注的东西在 DOM 中发生变化时采取行动的方式。 (比如当一个节点被附加到一个父节点等时)或mutation events 但我认为突变事件存在性能问题并且也贬值有利于突变观察者。
标签: javascript ecmascript-6 promise