I’m trying to set a delay before every recursive function call. Currently, it’s returning undefined
. The problem might be the scope of the recursive call (inside settimeout and then).
I tried it like this:
JavaScript
x
15
15
1
function delay(ms) {
2
return new Promise(resolve => {
3
setTimeout(resolve, ms)
4
});
5
}
6
7
const checkIfListElementIsRendered = (className) => {
8
delay(10).then(function (res) {
9
if (document.getElementsByClassName(className)[0]) {
10
return true;
11
}
12
return checkIfListElementIsRendered(className);
13
})
14
}
15
And this:
JavaScript
1
10
10
1
const checkIfListElementIsRendered = (className) => {
2
if (document.getElementsByClassName(className)[0]) {
3
return true;
4
}
5
6
setTimeout(() => {
7
return checkIfListElementIsRendered(className);
8
}, 10);
9
}
10
Any help is appreciated!
Advertisement
Answer
You need to turn checkIfListElementIsRendered
to async/await
syntax, and await
the delay
and checkIfListElementIsRendered
methods, Also instead return true
turn it to promise
to be always return a promise
.
When you call checkIfListElementIsRendered
method outside, you need to resolve it with await
or then
callback.
JavaScript
1
14
14
1
function delay(ms) {
2
return new Promise(resolve => {
3
setTimeout(resolve, ms)
4
});
5
}
6
7
const checkIfListElementIsRendered = async (className) => {
8
await delay(10)
9
if (document.getElementsByClassName(className)[0]) {
10
return Promise.resolve(true);
11
}
12
return await checkIfListElementIsRendered(className);
13
}
14