async function makeAPICall(resource, controllerName, action, apiOptions) {
    const controller = api[controllerName];

    let timer;

    try {
        let response;

        if (config.get('optimization:getHelper:timeout:threshold')) {
            const logLevel = config.get('optimization:getHelper:timeout:level') || 'error';
            const threshold = config.get('optimization:getHelper:timeout:threshold');

            const apiResponse = controller[action](apiOptions);

            const timeout = new Promise((resolve) => {
                timer = setTimeout(() => {
                    logging[logLevel](new errors.HelperWarning({
                        message: `{{#get}} took longer than ${threshold}ms and was aborted`,
                        code: 'ABORTED_GET_HELPER',
                        errorDetails: {
                            api: `${controllerName}.${action}`,
                            apiOptions
                        }
                    }));

                    resolve({[resource]: []});
                }, threshold);
            });

            response = await Promise.race([apiResponse, timeout]);
            clearTimeout(timer);
        } else {
            response = await controller[action](apiOptions);
        }

        return response;
    } catch (err) {
        clearTimeout(timer);
        throw err;
    }
}
@param {String} resource
@param {String} controllerName
@param {String} action
@param {Object} apiOptions
@returns {Promise<Object>}