Compare commits
2 Commits
9164bae268
...
e75b7b8efe
Author | SHA1 | Date | |
---|---|---|---|
e75b7b8efe | |||
28fbac0c6d |
@ -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
28
wait-for.js
Normal 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();
|
||||
});
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user