递归函数调用之前的延迟

3

我正在尝试在每次递归函数调用之前设置延迟。目前,它返回undefined。问题可能是递归调用的作用域(在settimeout中然后)。 我像这样尝试过:

    function delay(ms) {
        return new Promise(resolve => {
            setTimeout(resolve, ms)
        });
    } 

    const checkIfListElementIsRendered = (className) => {
        delay(10).then(function (res) {
            if (document.getElementsByClassName(className)[0]) {
                return true;
            }
            return checkIfListElementIsRendered(className);
        })
    }

并且这个:

    const checkIfListElementIsRendered = (className) => {
        if (document.getElementsByClassName(className)[0]) {
            return true;
        }
            
        setTimeout(() => {
            return checkIfListElementIsRendered(className);
        }, 10);   
    }

非常感谢您的帮助!


1
你没有返回任何东西,因此没有返回值。将函数标记为异步并添加await。 - Konrad
1个回答

4

你需要将 checkIfListElementIsRendered 方法改为 async/await 语法,并且需要等待 delaycheckIfListElementIsRendered 方法执行完毕,另外,不要返回 true ,而是将其改为返回一个 promise

当你在外部调用 checkIfListElementIsRendered 方法时,你需要使用 await 或者 then 回调来解决它。

function delay(ms) {
    return new Promise(resolve => {
        setTimeout(resolve, ms)
    });
} 

const checkIfListElementIsRendered = async (className) => {
   await delay(10)
   if (document.getElementsByClassName(className)[0]) {
      return Promise.resolve(true);
   }
   return await checkIfListElementIsRendered(className);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接