Compare commits
2 Commits
9164bae268
...
e75b7b8efe
Author | SHA1 | Date | |
---|---|---|---|
e75b7b8efe | |||
28fbac0c6d |
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@tp/helpers",
|
"name": "@tp/helpers",
|
||||||
"version": "2.5.0",
|
"version": "2.6.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "closest.js",
|
"main": "closest.js",
|
||||||
"scripts": {
|
"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