If you don't want to use a mutation observer and you just want to periodically poll to find an element, here's how to do that with async/await:
const elements = await waitForElementsToExist('div.my-class');
function waitForElementsToExist(selector, interval = 100, retriesLeft = 100) {
return new Promise((accept, reject) => {
setElementsTimeout(selector, interval, retriesLeft, accept, reject);
});
}
function setElementsTimeout(selector, interval, retriesLeft, accept, reject) {
retriesLeft--;
const element = document.querySelectorAll(selector);
if (element) {
accept(element);
} else {
if (retriesLeft > 0) {
setTimeout(() => {
setElementTimeout(selector, interval, retriesLeft, accept, reject);
}, interval);
} else {
reject(`Ran out of patience waiting for ${selector}`);
}
}
}