diff --git a/src/taskworker.js b/src/taskworker.js index 0e2ef7b85..fe17579bd 100755 --- a/src/taskworker.js +++ b/src/taskworker.js @@ -16,7 +16,8 @@ const apptask = require('./apptask.js'), safe = require('safetydance'), settings = require('./settings.js'), tasks = require('./tasks.js'), - updater = require('./updater.js'); + updater = require('./updater.js'), + util = require('util'); const TASKS = { // indexed by task type app: apptask.run, @@ -103,7 +104,12 @@ async.series([ }; try { - TASKS[task.type].apply(null, task.args.concat(progressCallback).concat(resultCallback)); + if (util.types.isAsyncFunction(TASKS[task.type])) { // can also use fn[Symbol.toStringTag] + const [error, result] = await safe(TASKS[task.type].apply(null, task.args.concat(progressCallback))); + resultCallback(error, result); + } else { + TASKS[task.type].apply(null, task.args.concat(progressCallback).concat(resultCallback)); + } } catch (error) { debug('Uncaught exception in task', error); process.exit(1); // do not call setCompleted() intentionally. the task code must be resilient enough to handle it