Compare commits

...

2 Commits

Author SHA1 Message Date
pk
e75b7b8efe Bump version 2025-03-25 12:51:47 +01:00
pk
28fbac0c6d Add waitFor 2025-03-25 12:51:19 +01:00
2 changed files with 29 additions and 1 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@tp/helpers",
"version": "2.5.0",
"version": "2.6.0",
"description": "",
"main": "closest.js",
"scripts": {

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