Hallo Habr!
Das Thema Fehlerbehandlung in JavaScript stellt sich nicht nur fĂŒr jeden AnfĂ€nger, sondern auch fĂŒr einen erfahrenen Entwickler. Ich stelle fest, dass das Thema bereits ziemlich abgedroschen ist, daher werde ich mir erlauben, in einer kurzen Zusammenfassung alles zusammenzufassen, was wirklich effektiv ist und von mir, Kollegen und IT-Gurus im Kampf getestet wurde.
Damit Sie verstehen, worauf es ankommt und ob es etwas Neues fĂŒr Sie gibt, finden Sie unten die Struktur der Notiz:
JavaScript-Fehler?
Methoden zur Fehlerbehandlung bei Stahlbeton
Unser Leben leichter machen
AbhÀngigkeitsfehler
JavaScript-Fehler?
Ohne auf die Etymologie eines Fehlers in JavaScript einzugehen, wollen wir ihn abstrakt charakterisieren, da das Fehlerobjekt selbst in JS nicht vollstÀndig standardisiert ist.
Ein Fehler in JS ist das "Auslösen" einer Ausnahme. Die Ausnahme muss vom Programm behandelt werden, andernfalls bringt uns der Interpreter an die Stelle zurĂŒck, an der diese Ausnahme ausgelöst wurde. StandardmĂ€Ăig löst eine Ausnahme ein Fehlerobjekt aus.
Es spielt keine Rolle, ob Sie Frontend oder Backend schreiben, es gibt nur einen Ansatz fĂŒr die Behandlung: Fangen Sie die unglĂŒckliche Ausnahme und behandeln Sie sie. Vor allem in der Produktion muss alles verarbeitet werden.
Lassen Sie uns sofort einige nicht standardisierte Situationen (wie jeder andere auch) aufklÀren:
Fehler von auĂerhalb des Programms,
Terminalfehler.
Terminalfehler ist der vom Betriebssystem oder DĂ€mon zurĂŒckgegebene Fehlercode.
, .
, .. , , .
â ?
, :
, , . , â JavaScript, Typescript.
, , Error:
, , , .
. , â 80% . 20% , â , , â .
, . , TDD E2E, , , :
, ;
(, , , ..);
(, , ..);
-;
;
/ .
. , , , , . , - .
â , . .
SOLID DRY, (middleware) , . Middleware , . .
, : , JavaScript? .
tryâŠcatch, .
:
// ...
const middlewareRequest = async (req) => {
try {
const { data } = await axios.get(req);
return data;
} catch (err) {
throw new Error(err);
}
}
// ..., tryâŠcatch, « », DRY , .
:
// ...
const wrapEventWithExcpetionHandler = (middleware) => (e) => {
const { error } = e; // ,
if (error) {
throw new Error(error);
}
try {
return middleware(e);
} catch (err) {
throw new Error(err);
}
}
window.addEventListener('mousemove', wrapEventWithExceptionHandler(middlewareGlobalMouseMove));
// ..., , , , .
, «» .
, : , , . , , , .
?
â . â , «» . , .
// ...
/* console.log */
/*
, ,
*/
console.log('Check:\r\n username - %s\r\n age - %i\r\n data - %o', 'Mike', 23, {status: 'registered'});
/*
Check:
username - Mike
age - 23
data - {status: "registered"}
*/
/* */
console.table([{username: 'Mike', age: 23}, {username: 'Sarah', age: 46}]);
/* */
console.dir(document.body.childNodes[1]);
// ..., , (, , ..), , .
1. : , . log4js. , , .
2. DevTools! . , â , . Source. , . .
3. .
4. , , (. ).
, , , .
JS, .
, , . , ( ).
Graphana, , .. JavaScript, , .
, .
, .. . ? :
. console (log, warn, error, info), (. log4js). , , .
production/development/test source-map -, , .
, , Pull Request. Fork , , .
, babel. babel AST, JavaScript . , , , , . , , , , .
Oben haben wir Standardmethoden zur Fehlerbehandlung betrachtet und Beispiele fĂŒr Techniken mit Code fĂŒr gĂ€ngige Pakete demonstriert. DarĂŒber hinaus gibt es Tools zur Automatisierung der Erfassung und Verarbeitung von Fehlern. Weitere Informationen finden Sie unter den Links.
Kombinieren Sie mehrere Methoden und vertrauen Sie seriösen Projekten. Stellen Sie sicher, dass Sie sich wÀhrend der Entwicklung anmelden. Haltepunkte helfen nur, das Problem in einem bestimmten Fall zu verstehen, sind jedoch keine Heilung.
Autor: Rishat Gabaidullov, Leiter der Frontend Practice Group bei Reksoft.