handleWorkerResponse(worker, workerResponse) {
        if (worker.isTerminating) return;

        const call = worker.calls.get(workerResponse.callId);

        if (this.options.hasTimeout()) {
            clearTimeout(call.timer);
        }

        process.nextTick(function () {
            if (workerResponse.error) {
                call.reject(workerResponse.error);
            } else {
                call.resolve(workerResponse.result);
            }
        });

        worker.calls.delete(workerResponse.callId);
        this.ongoingTasksQueue.remove(call);

        if (worker.isExhausted() && !worker.isBusy()) {
            worker.stop();
        }

        this.processQueue();
    }
called from a child process, the data contains information needed to
look up the child and the original call so we can invoke the callback

@param {Worker} worker
@param {Response} workerResponse
@private
@returns {*}