move timeout logic to heicConverterService
This commit is contained in:
parent
abe68ba660
commit
af9e8d1a61
|
@ -1,34 +1,12 @@
|
|||
import * as HeicConvert from 'heic-convert';
|
||||
|
||||
const WAIT_TIME_IN_MICROSECONDS = 10 * 1000;
|
||||
const BREATH_TIME_IN_MICROSECONDS = 1000;
|
||||
|
||||
export async function convertHEIC(
|
||||
fileBlob: Blob,
|
||||
format: string
|
||||
): Promise<Blob> {
|
||||
return await new Promise((resolve, reject) => {
|
||||
const main = async () => {
|
||||
try {
|
||||
const filedata = new Uint8Array(await fileBlob.arrayBuffer());
|
||||
const timeout = setTimeout(() => {
|
||||
reject(Error('wait time exceeded'));
|
||||
}, WAIT_TIME_IN_MICROSECONDS);
|
||||
const result = await HeicConvert({ buffer: filedata, format });
|
||||
clearTimeout(timeout);
|
||||
const convertedFileData = new Uint8Array(result);
|
||||
const convertedFileBlob = new Blob([convertedFileData]);
|
||||
await new Promise((resolve) => {
|
||||
setTimeout(
|
||||
() => resolve(null),
|
||||
BREATH_TIME_IN_MICROSECONDS
|
||||
);
|
||||
});
|
||||
resolve(convertedFileBlob);
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
main();
|
||||
});
|
||||
const filedata = new Uint8Array(await fileBlob.arrayBuffer());
|
||||
const result = await HeicConvert({ buffer: filedata, format });
|
||||
const convertedFileData = new Uint8Array(result);
|
||||
const convertedFileBlob = new Blob([convertedFileData]);
|
||||
return convertedFileBlob;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@ import { logUploadInfo } from 'utils/upload';
|
|||
const WORKER_POOL_SIZE = 2;
|
||||
const MAX_CONVERSION_IN_PARALLEL = 1;
|
||||
const WAIT_TIME_BEFORE_NEXT_ATTEMPT_IN_MICROSECONDS = [100, 100];
|
||||
const WAIT_TIME_IN_MICROSECONDS = 10 * 1000;
|
||||
const BREATH_TIME_IN_MICROSECONDS = 1000;
|
||||
|
||||
class HEICConverter {
|
||||
private convertProcessor = new QueueProcessor<Blob>(
|
||||
|
@ -31,10 +33,33 @@ class HEICConverter {
|
|||
retryAsyncFunction<Blob>(async () => {
|
||||
const { comlink, worker } = this.workerPool.shift();
|
||||
try {
|
||||
const convertedHEIC = await comlink.convertHEIC(
|
||||
fileBlob,
|
||||
format
|
||||
const convertedHEIC = await new Promise<Blob>(
|
||||
(resolve, reject) => {
|
||||
const main = async () => {
|
||||
try {
|
||||
const timeout = setTimeout(() => {
|
||||
reject(Error('wait time exceeded'));
|
||||
}, WAIT_TIME_IN_MICROSECONDS);
|
||||
const convertedHEIC =
|
||||
await comlink.convertHEIC(
|
||||
fileBlob,
|
||||
format
|
||||
);
|
||||
clearTimeout(timeout);
|
||||
resolve(convertedHEIC);
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
main();
|
||||
}
|
||||
);
|
||||
await new Promise((resolve) => {
|
||||
setTimeout(
|
||||
() => resolve(null),
|
||||
BREATH_TIME_IN_MICROSECONDS
|
||||
);
|
||||
});
|
||||
this.workerPool.push({ comlink, worker });
|
||||
return convertedHEIC;
|
||||
} catch (e) {
|
||||
|
|
Loading…
Reference in a new issue