Skip to content

Instantly share code, notes, and snippets.

@objectfoo
Created September 17, 2018 00:19
Show Gist options
  • Select an option

  • Save objectfoo/6555669b2666baca02b7b496c0500c94 to your computer and use it in GitHub Desktop.

Select an option

Save objectfoo/6555669b2666baca02b7b496c0500c94 to your computer and use it in GitHub Desktop.
process.on('uncaughtException', (e) => {
console.log('XXXX UNCAUGHT EXCEPTION XXXX');
});
process.on('unhandledRejection', (e) => {
console.log('XXXX UNHANDLED REJECTION XXXX');
});
const newError = (name = 'GenericError', message = 'error messaage') => {
const e = new Error(message);
e.name = name;
return e;
};
const makeReq = ({ ok = true, statusCode = 200, body = {} } = {}) =>
({ ok, statusCode, body });
logInfo = data => {
console.log('INFO', data);
return data;
};
logError = error => {
console.error(`handled: ${error.name || 'some error'}`);
return error;
};
const throwFactory = (t, name, message) => response => {
if (t(response))
throw newError(name, message);
return response;
};
const rejectIfNotOk = throwFactory(
response => response.ok !== true,
'HTTPStatusError',
'response not ok'
);
const rejectIfNotLoggedIn = throwFactory(
response => Boolean(response.body && response.body.reloginUrl),
'UserNotLoggedIn',
'user not logged in'
);
const throwNetworkError = r => {
const e = newError('PromiseRejected', 'Promise rejection error');
return Promise.reject(e);
};
const validateResponse = response => (
Promise.resolve(response)
.then(rejectIfNotOk)
.then(rejectIfNotLoggedIn)
);
const req = {
okTrue: () => Promise.resolve(makeReq()),
okFalse: () => Promise.resolve(makeReq({ ok: false, statusCode: 400 })),
reject: e => Promise.reject(e || {}),
notLoggedIn: () => Promise.resolve(makeReq({
body: { success: true, reloginUrl: '/login' }
}))
};
req.okTrue().then(validateResponse).then(logInfo).catch(logError);
req.okFalse().then(validateResponse).then(logInfo).catch(logError);
req.reject(newError('ReqRejected')).then(validateResponse).catch(logError);
req.notLoggedIn().then(validateResponse).then(logInfo).catch(logError);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment