Skip to content

Instantly share code, notes, and snippets.

View rgabaydullov's full-sized avatar
🧨

Rishat Gabaydullov rgabaydullov

🧨
View GitHub Profile
@rgabaydullov
rgabaydullov / index.js
Created August 27, 2020 08:04
Extended debugging in javascript example
// ...
/* обычный console.log может превратиться в нечто большее */
/*
как правило, начинающие программисты логируют по одной переменной,
мы же можем форматировать строки с любым количеством аргументов
*/
console.log('Check:\r\n username - %s\r\n age - %i\r\n data - %o', 'Mike', 23, {status: 'registered'});
@rgabaydullov
rgabaydullov / index.js
Created August 26, 2020 10:30
Event-based error handling example
// ...
const wrapEventWithExcpetionHandler = (middleware) => (e) => {
const { error } = e; // предположим, что ошибка в этом поле
if (error) {
throw new Error(error);
}
try {
@rgabaydullov
rgabaydullov / index.js
Created August 26, 2020 10:04
Async code error handling example
// ...
const middlewareRequest = async (req) => {
try {
const { data } = await axios.get(req);
return data;
} catch (err) {
throw new Error(err);
}
@rgabaydullov
rgabaydullov / index.js
Created August 25, 2020 09:23
Vue error handling example
/* учитывайте, что глобальный метод window.onerror
не будет ловить исключения без Vue.config.errorHandler */
Vue.config.errorHandler = (error, vm, info) => {
return middlewareErrorHandler(error, info);
}
// сюда попадут все ошибки, которые находятся за пределами исполнения Vue
window.onerror = (
message,
@rgabaydullov
rgabaydullov / index.js
Created August 25, 2020 09:16
Angular error handling example
import { NgModule, Errorhandler } from '@angular/core';
@Injectable
export class CustomErrorHandler extends ErrorHandler {
handleError(error) {
return middlewareErrorHandler(error);
}
}
// ...
@rgabaydullov
rgabaydullov / index.jsx
Created August 25, 2020 09:08
React error handling example
import React from 'react';
/* обязательно ознакомьтесь с документацией https://ru.reactjs.org/docs/error-boundaries.html */
/* к сожалению сейчас hooks не поддерживают работу с методом React Lifecycle API: componentDidCatch */
export const withErrorBoundaries = (Wrapped) => {
class ErrorBoundary extends React.PureComponent {
/* укажите уникальное название компонента, для упрощения отладки в DevTools */
static displayName = `ComponentWithErrorBoundary(${Wrapped.name || 'Wrapped'})`;
@rgabaydullov
rgabaydullov / index.js
Created August 25, 2020 08:18
VanillaJS error handling example
/* middleware может принимать любое количество аргументов любых типов */
const middleware = (...args) => {
const [event, ...data] = args;
if (event.error) {
/* поймали объект экземпляр Error */
return event.error;
}
@rgabaydullov
rgabaydullov / app.js
Created August 25, 2020 08:10
NodeJS error handling example
export const uncaughtExceptionHandler = (app) => {
/* Считаем, что все middleware функции подключаются в качестве модулей */
process.on('error', middlewareErrorHandler);
process.on('uncaughtException', middlewareExceptionHandler);
/* В данном случае подразумеваем, что наше приложение может обслуживать
несколько микросервисов по типу app, поэтому ловим все ошибки в сервисе process */
app
.on('error', middlewareErrorHandler);
};