From db1d282da2022e40ba8fd643d39f0962a635ff20 Mon Sep 17 00:00:00 2001 From: Joe Fleming Date: Tue, 28 Jun 2016 17:03:28 -0700 Subject: [PATCH] handle resolve, reject and timeout correctly --- src/worker.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/worker.js b/src/worker.js index 04d07b7..acc4fa3 100644 --- a/src/worker.js +++ b/src/worker.js @@ -123,9 +123,22 @@ export default class Job extends events.EventEmitter { this.debug(`Starting job ${job._id}`); 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(() => { + if (isResolved) return; + this.debug(`Timeout processing job ${job._id}`); reject(new WorkerTimeoutError({ timeout: job._source.timeout,