fonteva-design-guide
Version:
## Dev, Build and Test
67 lines (58 loc) • 2.17 kB
JavaScript
import { publishEvent } from 'c/pubsub';
var serviceCallPromise = {};
const getValue = (functionCall, args, forceCall) => {
let trace = Error().stack;
return new Promise((resolve, reject) => {
const customError = args.customError;
delete args.customError;
let cacheString = functionCall.toString() + JSON.stringify(args);
if (serviceCallPromise[cacheString] == null || forceCall) {
serviceCallPromise[cacheString] = functionCall(args)
.then(result => {
const error = isSyslogError(result, args, trace, customError);
if (error) {
reject(error);
} else {
resolve(result);
return result;
}
})
.catch(error => {
reject(error);
});
} else {
serviceCallPromise[cacheString].then(result => {
resolve(result);
return result;
});
}
});
};
const isSyslogError = (result, params, trace, customError) => {
if (result != null && result.sysLog != null) {
if (customError) {
result.sysLog.cleanMessage = result.sysLog.exMessage.replace(/\(Class\..*$/, '');
return result;
}
let debug = sessionStorage.getItem('fon.log');
let verbose = debug === 'debug';
if (verbose) {
console.groupCollapsed('stack trace');
console.log(trace);
console.groupEnd();
console.groupCollapsed('action parameters');
console.log(JSON.stringify(params, null, ' '));
console.groupEnd();
console.groupCollapsed('return value');
console.log(JSON.stringify(result, null, ' '));
console.groupEnd();
}
publishEvent('toast', {
message: result.message,
variant: 'error'
});
return result.message;
}
return false;
};
export { getValue };