You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
780 B
TypeScript
29 lines
780 B
TypeScript
// Copyright (C) 2021 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
export default function waitFor(frequencyHz: number, predicate: CallableFunction): Promise<void> {
|
|
return new Promise((resolve, reject) => {
|
|
if (typeof predicate !== 'function') {
|
|
reject(new Error(`Predicate must be a function, got ${typeof predicate}`));
|
|
}
|
|
|
|
const internalWait = (): void => {
|
|
let result = false;
|
|
try {
|
|
result = predicate();
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
|
|
if (result) {
|
|
resolve();
|
|
} else {
|
|
setTimeout(internalWait, 1000 / frequencyHz);
|
|
}
|
|
};
|
|
|
|
setTimeout(internalWait);
|
|
});
|
|
}
|