我试图在每次递归函数调用之前设置延迟。目前,它正在返回 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
语法,await
delay
和 checkIfListElementIsRendered
方法,也改为返回 true
将其转换为 promise
以始终返回 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);
}
关于javascript - 递归函数调用前延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73357912/