41 lines
1.1 KiB
JavaScript
41 lines
1.1 KiB
JavaScript
export function getResolver(timeout = 5000) {
|
|
const resolver = {};
|
|
resolver.id = generateId(8);
|
|
resolver.completed = false;
|
|
resolver.resolved = false;
|
|
resolver.rejected = false;
|
|
resolver.promise = new Promise((resolve, reject) => {
|
|
resolver.reject = () => {
|
|
resolver.completed = true;
|
|
resolver.rejected = true;
|
|
reject();
|
|
};
|
|
resolver.resolve = (data) => {
|
|
resolver.completed = true;
|
|
resolver.resolved = true;
|
|
resolve(data);
|
|
};
|
|
});
|
|
resolver.timeout = setTimeout(() => {
|
|
if (!resolver.completed) {
|
|
resolver.reject();
|
|
}
|
|
}, timeout);
|
|
return resolver;
|
|
}
|
|
export function wait(ms = 16, value) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve(value);
|
|
}, ms);
|
|
});
|
|
}
|
|
function dec2hex(dec) {
|
|
return dec.toString(16).padStart(2, "0");
|
|
}
|
|
export function generateId(length) {
|
|
const arr = new Uint8Array(length / 2);
|
|
crypto.getRandomValues(arr);
|
|
return Array.from(arr, dec2hex).join('');
|
|
}
|