Add waitFor
This commit is contained in:
parent
9164bae268
commit
28fbac0c6d
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