javascript - 递归函数调用前延迟

标签 javascript

我试图在每次递归函数调用之前设置延迟。目前,它正在返回 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);   
    }

感谢任何帮助!

最佳答案

需要将checkIfListElementIsRendered转为async/await语法,awaitdelay checkIfListElementIsRendered 方法,也改为返回 true 将其转换为 promise 以始终返回 promise

在外部调用checkIfListElementIsRendered方法时,需要通过awaitthen回调来解析。

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);
}

关于javascript - 递归函数调用前延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73357912/

相关文章:

javascript - 如何逐渐设置正在(冒泡)排序的元素的样式?

javascript - 使用 html 和 javascript 添加两个数字

javascript - 防止 window.history 中的重复实例

javascript - 如何在AngularJS中调整图像大小?

javascript - 需要有关函数的帮助

javascript - 如何在 ngfor 循环中显示隐藏项目?

javascript - 如何使用执行符号计算的数学库(计算机代数系统)

javascript - 如何验证 for 循环是否完成了 Node js 中的所有迭代,如果循环包含带有回调的函数调用?

javascript - d3.js 带有工具提示的移动平均线图(自定义插值)

javascript - 为什么 (_=1)=>$=>_++ 是一个计数器