Merge pull request #233 from ente-io/queue-processor-update
bubble up error to caller from queue processor
This commit is contained in:
commit
43fb4326b9
|
@ -33,12 +33,17 @@ class FFmpegService {
|
||||||
const response = this.generateThumbnailProcessor.queueUpRequest(
|
const response = this.generateThumbnailProcessor.queueUpRequest(
|
||||||
generateThumbnailHelper.bind(null, this.ffmpeg, file)
|
generateThumbnailHelper.bind(null, this.ffmpeg, file)
|
||||||
);
|
);
|
||||||
|
try {
|
||||||
const thumbnail = await response.promise;
|
return await response.promise;
|
||||||
if (!thumbnail) {
|
} catch (e) {
|
||||||
throw Error(CustomError.THUMBNAIL_GENERATION_FAILED);
|
if (e.message === CustomError.REQUEST_CANCELLED) {
|
||||||
|
// ignore
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
logError(e, 'ffmpeg thumbnail generation failed');
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return thumbnail;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
|
import { CustomError } from 'utils/common/errorUtil';
|
||||||
|
|
||||||
interface RequestQueueItem {
|
interface RequestQueueItem {
|
||||||
request: (canceller?: RequestCanceller) => Promise<any>;
|
request: (canceller?: RequestCanceller) => Promise<any>;
|
||||||
callback: (response) => void;
|
successCallback: (response: any) => void;
|
||||||
|
failureCallback: (error: Error) => void;
|
||||||
isCanceled: { status: boolean };
|
isCanceled: { status: boolean };
|
||||||
canceller: { exec: () => void };
|
canceller: { exec: () => void };
|
||||||
}
|
}
|
||||||
|
@ -26,10 +29,11 @@ export default class QueueProcessor<T> {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const promise = new Promise<T>((resolve) => {
|
const promise = new Promise<T>((resolve, reject) => {
|
||||||
this.requestQueue.push({
|
this.requestQueue.push({
|
||||||
request,
|
request,
|
||||||
callback: resolve,
|
successCallback: resolve,
|
||||||
|
failureCallback: reject,
|
||||||
isCanceled,
|
isCanceled,
|
||||||
canceller,
|
canceller,
|
||||||
});
|
});
|
||||||
|
@ -53,15 +57,15 @@ export default class QueueProcessor<T> {
|
||||||
let response = null;
|
let response = null;
|
||||||
|
|
||||||
if (queueItem.isCanceled.status) {
|
if (queueItem.isCanceled.status) {
|
||||||
response = null;
|
queueItem.failureCallback(Error(CustomError.REQUEST_CANCELLED));
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
response = await queueItem.request(queueItem.canceller);
|
response = await queueItem.request(queueItem.canceller);
|
||||||
|
queueItem.successCallback(response);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
response = null;
|
queueItem.failureCallback(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
queueItem.callback(response);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ export enum CustomError {
|
||||||
FAV_COLLECTION_MISSING = 'favorite collection missing',
|
FAV_COLLECTION_MISSING = 'favorite collection missing',
|
||||||
INVALID_COLLECTION_OPERATION = 'invalid collection operation',
|
INVALID_COLLECTION_OPERATION = 'invalid collection operation',
|
||||||
WAIT_TIME_EXCEEDED = 'thumbnail generation wait time exceeded',
|
WAIT_TIME_EXCEEDED = 'thumbnail generation wait time exceeded',
|
||||||
|
REQUEST_CANCELLED = 'request canceled',
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseUploadError(error: AxiosResponse) {
|
function parseUploadError(error: AxiosResponse) {
|
||||||
|
|
Loading…
Reference in a new issue