handle resolve, reject and timeout correctly
This commit is contained in:
@@ -123,9 +123,22 @@ export default class Job extends events.EventEmitter {
|
|||||||
this.debug(`Starting job ${job._id}`);
|
this.debug(`Starting job ${job._id}`);
|
||||||
|
|
||||||
const workerOutput = new Promise((resolve, reject) => {
|
const workerOutput = new Promise((resolve, reject) => {
|
||||||
resolve(this.workerFn.call(null, job._source.payload));
|
// run the worker's workerFn
|
||||||
|
let isResolved = false;
|
||||||
|
Promise.resolve(this.workerFn.call(null, job._source.payload))
|
||||||
|
.then((res) => {
|
||||||
|
isResolved = true;
|
||||||
|
resolve(res);
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
isResolved = true;
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
|
||||||
|
// fail if workerFn doesn't finish before timeout
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
if (isResolved) return;
|
||||||
|
|
||||||
this.debug(`Timeout processing job ${job._id}`);
|
this.debug(`Timeout processing job ${job._id}`);
|
||||||
reject(new WorkerTimeoutError({
|
reject(new WorkerTimeoutError({
|
||||||
timeout: job._source.timeout,
|
timeout: job._source.timeout,
|
||||||
|
|||||||
Reference in New Issue
Block a user