首页 > 解决方案 > 出现时获取元素

问题描述

我需要在网页上获取一个元素,通常需要一些时间才能出现,因此我在如何等待元素存在?

function getElement(selector, i = 5) {
    return new Promise(async (resolve, reject) => {
        if (i <= 0) return reject(`${selector} not found`);
        const elements = document.querySelectorAll(selector);
        if (elements.length) return resolve(elements);
        return setTimeout(async () => await getElement(selector, i - 1), 1000);
    })
}

// Now call it with your selector

try {
    element = await getElement('.woohoo');
} catch (e) {
  // catch the e 
}

//OR

getElement('.woohoo', 5)
.then(element => {
  // do somthing with the elements 
})
.catch(e => { 
  // catch the error 
});

我在我的项目中测试过,如果目标元素在开始时它会返回该元素,但如果目标元素从未出现,它将报告' Uncaught(in promise)XX not found '错误,最坏的情况是没有任何返回如果目标元素在尝试 4 到 1 次后出现,无异常,无元素

代码有什么问题?或如何解决?

谢谢。

标签: javascriptpromiseasync-awaitsettimeout

解决方案


推荐阅读