handle resolve, reject and timeout correctly

This commit is contained in:
2016-06-28 17:03:28 -07:00
parent a5f1d77f23
commit db1d282da2

View File

@@ -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,