Add waitFor

This commit is contained in:
trading_peter 2025-03-25 12:51:19 +01:00
parent 9164bae268
commit 28fbac0c6d

28
wait-for.js Normal file
View File

@ -0,0 +1,28 @@
/**
* Wait for some test to be true, returns a promise that resolves when condition is met.
* Useful to wait for element render, for example. Uses requestAnimationFrame.
*
* @param {Function} testFn Test function to call. Should return true to resolve and false to continue testing.
* @param {Number} maxTries Maximum number of rounds to test. If exceeded, the promise rejects. Defaults to 5000.
* @return {Promise} Promise that resolves when test passes or rejects when maxTries is reached
*/
export const waitFor = (testFn, maxTries = 5000) => {
return new Promise((resolve, reject) => {
let tries = 0;
const boundTestFn = testFn.bind(this);
function waiter() {
if (tries === maxTries) {
return reject(new Error('waitFor: maximum tries exceeded'));
}
if (!boundTestFn()) {
window.requestAnimationFrame(waiter);
tries++;
return;
}
resolve(true);
}
waiter();
});
}